Las Propiedades

Para poder empezar con los componentes es necesario que tengamos en cuenta como podemos definir propiedades dentro de cada uno de los componentes. Las propiedades son los elementos básicos de cualquier componente. Mediante las propiedades vamos a poder realizar cualquier almacenamiento cuyos valores sean usados por el componente.Las propiedades no sólo nos van a servir para almacenar datos dentro del componente sino tambien para realizar el interface que va a permitir al desarrollador indicar que tiene que hacer el componente, es decir interactuar con el desarrollador..

Las propiedades son de facto el elemento más importante por su utilización maxiva dentro de C++ Builder. Las ventajas que posee las propiedades frente a los miembros de la clase o a las variables es que pueden ser incializadas en tiempo de diseño aparte de que la aparición en el Object Inspector las convierten en una herramienta visual importantisima para incializar los componentes en tiempo de diseño. Además del aporte visual en tiempo de diseño nos encontramos con que las propiedades realizan la propia comprobación de tipos en tiempo de diseño.

Aparte de estas características nos encontramos con que las propiedades son una herramienta utilisima para ocultar detalles de la implementación bien accediendo directamente a los datos de la clase que almacena los datos con los que vamos a trabajar , bien sea a través de los métodos que nos pueden servir para implementar las opciones de escritura/lectura sobre los mencionados datos miembro de la clase.

Las propiedades pueden ser basicamente de cualquier tipo que podamos manejar en C++ Builder aunque el propio compilador implementa una serie de editrores de propiedades para los más usados de ellos, otros como el tipo Array,Object,enumerado... deben ser acompañador por su propio editor de propiedades.

Las propiedades se definen dentro de la directiva __published y precedidas por la palabra reservada __property. Una vez que indiquemos el tipo y el nombre deberemos indicar dónde va a almacenar los valores la propiedad. Normalmente cada vez que realizamos una modificación dentro de una propiedad declarada como published lo que ocurrirá es que estaremos modificando los valores dentro de una propiedad que estará definida dentro de la directiva private.

¿Para qué definir una propiedad como private para almacenar los valores de una propiedad definida como published?. En principio es aconsejable seguir esta técnica para poder proteger al componente de cualquier manipulación directa por parte del programador de los valores declarados como privados. Tenemos que tener en cuenta las propiedades definidas como private son las que van a definir el flujo de ejecución de nuestro componente. Lo que realmente estamos haciendo es proteger a nuestro componente de cualquier de incosistencia de tipo o de inconsistencia de datos, independizamos el interface del desarrollador de los datos que maneja el componente.

Para almacenar los valores que se modifican dentro del interface del desarrollador podemos seguir dos opciones:

El código utilizado quedaría de la siguiente manera

__property Boolean Activar = {read = FActivar,write=FActivar};

En principìo con esta sola propiedad tendríamos más que suficiente para poder comprobar como funciona nuestra propiedad.

Como podemos observar la propiedad Activar que es de tipo boleano utiliza a la propiedad FActivar tanto para escribir como para poder leer, es decir para almacenar los valores que cambie el usuario como para almacenar los valores que cambia. Este es el caso más sencillo que podemos tener para utilizar una propiedad dentro de un componente.


Cuando nos encontramos con una propiedad que es heredada de su clase ancestro podemos redefinir dónde se almacenará y el ámbito de visibilidad siempre que sea menos restrictivo que en la clase ancestro. Nunca vamos a poder realizar una redefinición cambiando a un ámbito menos restrictivo. Cuando redefinamos una propiedad en una clase derivada solo tendremos que indicar la palabra reservada __property y el nombre de la propiedad y si es necesario cambiando el valor por defecto de la propiedad.

Aunque no existen unas normas estrictas en cuanto a la definición de las propiedades y al almacenamiento de los datos que maneja si tenemos que tener en cuenta una serie de puntos que son los que marcar la norma más comón a la hora de hacer las cosas.

Otra de las partes importantes a la hora de definir una propiedad es determinar el tipo de acceso que va a utilizar para leer y escribir valores a los datos miembro. Básicamente tenemos dos tipos de accesso:

class PACKAGE TBarraTareas : public TComponent
{
private:
boolean FActivar;
protected:
public:
__published:

__property boolean Activar ={read=FActivar,write=FActivar};
};

En ambos casos es aconsejable que los métodos esten definidos dentro de la directiva protected para que queden ocultos al resto de componentes.

NO DEBERÁ crear un un método como public para evitar que los usuarios de los componentes puedan alterar los valores de las propiedades aunque sea de manera accidental.

En el siguiente ejemplo vemos como poder realizar un acceso mediante método

	

class PACKAGE TBarraTareas : public TComponent
{
private:
boolean FActivar;
protected:
public:
__published:

__property boolean Activar ={read=FActivar,write=FActivar};
};


(C) 1999 Database DM. la reproducción total o parcial de este curso, asi como la divulgación de parte o la totalidad de este curso, esta sujeta a las leyes de Propiedad.