3 de junio de 2021

Alcance (rango) de propiedades

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.

No hay comentarios. :

Publicar un comentario

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.