Titulo: Ver o no ver
Original: To See or Not To See
Autor: Jim Booth
Traducido por: Roberto Alfredo Moré
En esta columna investigaremos la visibilidad de
propiedades y métodos. Visual FoxPro nos da tres: Pública, Protegida y Oculta.
¿Que son exactamente cada una de estas y dónde deberíamos usar una en lugar
de la otra?.
Una pequeña clase.
Uno de los objetivos del desarrollo orientado a Objetos es aislar los datos y el
comportamiento requerido en una clase particular a esa clase misma, para reducir
el nivel de dependencia que esa clase particular tiene sobre otras clases no
relacionadas. Estas dependencias incluso pueden ser un problema dentro del mismo
árbol de la clase, afectando como la superclase (parent) y las subclases
interactúan.
Para examinar la visibilidad de propiedades y métodos usaremos un pequeño
ejemplo de una estructura de clases. El siguiente diagrama describe el ejemplo.
En este ejemplo hay dos definiciones de clase txtBase y txtSubClass.
TxtSubClass es una subclase de txtBase. Hay allí un formulario con una
instancia de txtSubClass, txtSubClass1, en él. La clase txtBase tiene una
propiedad, Prop1, agregada en ella y marcada como Oculta. TxtSubClass tiene
agregada una propiedad, Prop2, marcada como protegida.
Pública
La primer visibilidad a discutir es el valor de Pública. Al crear una propiedad
o método que es Público causa que aquella propiedad o método sea visible, o
sea que se la pueda leer, escribir o ejecutar desde cualquier otro objeto o
clase sin limitación.
Protegida
Un método o propiedad Protegida es accesible solamente por la clase que creó
dicha propiedad o método y para las subclases de esa clase. La visibilidad se
extiende a lo largo del árbol de subclases si hay varios niveles hacia abajo
(Prop2 en el diagrama de arriba es visible a txtSubClass, pero no puede ser
direccionada en el código que esté en el objeto txtSubClass1 o en el objeto
Formulario).
Nota del Traductor: se ha respetado en forma literal al autor, pero
en realidad la propiedad Prop2 es visible en txtSubClass1 y se puede hacer
referencia a ella en el formulario, pero no se puede modificar. Únicamente la
clase que creó la propiedad lo puede hacer.
Oculta
Un método o propiedad Oculta es visible ÚNICAMENTE para la clase que la ha
creado. Las subclases no ven esta propiedad/método en su hoja de propiedades y
no pueden acceder a la misma (ocurre un error de VFP). (Prop1 en el diagrama de
arriba es accesible SÓLO por la clase txtBase, txtSubClass no puede direccionar
la propiedad y el nombre de la propiedad no aparece en la hoja de propiedades de
la clase txtSubClass)
¿Por qué debería preocuparme?
Una de las características subyacentes del Diseño Orientado a Objetos es
"Ocultar la implementación de un objeto". Esto significa ocultar
completamente el mecanismo exacto que un objeto particular o clase usa para
cumplir con su responsabilidad.
A menudo, un objeto puede necesitar datos internos o funcionalidad que no tiene
ningún significado fuera del alcance de dicho objeto. Si estas porpiedades y
métodos fueran visibles para el mundo exterior, existe la posibilidad de que
puedan ser accedidos por algún código que no debería estar haciendo eso.
Usando la visibilidad se puede controlar absolutamente qué puede y qué no
puede acceder a propiedades y métodos.
Nota: También se puede cambiar la visibilidad de las propiedades y métodos de
Visual FoxPro usando el diálogo de Edición de Métodos y Propiedades.
Un ejemplo para Oculta.
Usted está diseñando una clase formulario que será utilizada por otros
desarrolladores a través de subclases. Uno de los comportamientos de la clase
se cumpliría mejor si estuviera repartido en múltiples métodos en lugar de
uno grande. No obstante, estos sub-métodos no son útiles fuera de la clase y
un desarrollador que sobreescriba uno de ellos convertiría en no funcional a la
clase. Usted puede definir un médodo como Público, aquel que será llamado por
los desarrolladores para iniciar el comportamiento, pero los restantes
sub-métodos como Oculto de manera que los otros desarrolladores ni siquiera
sabrán que existen.
Un ejemplo para Protegida.
Usted está creando una clase utilitaria que necesita algún almacenamiento
interno para su estado. Para ello crea un conjunto de propiedades. Si algún
objeto fuera de la clase modifica estas propiedades, el estado del objeto se
pierde. Usted puede definir estas propiedades como Protegidas y nada fuera del
objeto puede direccionarlas.
Usando los métodos Access y Assign.
Usted podría estar pensando que usando los métodos Access y Assign se hace
esencialmente la misma cosa que con popiedades protegidas. No exactamente. Los
métodos Access y Assign permiten responder a algo que se direcciona a una
propiedad, pero no previenen el acceso. En algunas situaciones, usted podría
querer permitir a objetos externos actualizar o leer una propiedad y necesita
hacer algo basado en el valor asignado o leído. En ese caso, los médodos
Access y Assign son la vía para hacerlo.
No obstante, creando un método Assign que siempre descarte la asignación, es
como ayudar a una persona que se está quemando manteniéndola bajo agua por 30
minutos.