Property es una forma de introducir efectos colaterales "controlados" en un objeto.
Como no soy muy bueno para explicar, trataré de hacerlo con un ejemplo.
Digamos que vos tenes un objeto TDatabase llamado miDB. Podes hacer
MiDB.Active := True;
La VCL no solo cambia el valor de la propiedad Active a True, sino que en efecto abre la base de datos, pidiendo un nombre de usuario y contraseña si es necesario. Eso es un efecto colateral.
pues bien. Ese efecto colateral esta controlado por una propiedad que en su implementación se veria algo asi como:
Código:
Type
TDatabase = Class (TComponent)
...
Private
FActive : Boolean;
...
Procedure SetActive(Value : Boolean);
...
Published
Property Active : Boolean read FActive write SetActive;
...
End;
Implementation
// aqui se hace la implementación del método
Procedure TDatabase.SetActive(Value : Boolean);
Begin
if Value Then
AbrirLaBaseDeDatosPidiendoUsuarioSiEsNecesario;
Else
CerrarLaBaseDeDatos;
FActive := True;
End;
Tratare de explicarte lo que ocurre, y es que en realidad las propiedades son, digamos, una forma de encapsular la implementación real de los objetos y brindar una interfaz consistente al programador.
Podes definir una propiedad de Lectura/Escritura, solo lectura o solo escritura.
Para ello te vales de las palabras reservadas read y write.
delante de cada una, colocas el nombre de un método o de un miembro de la clase, que será de donde provendran los datos.
Si usas métodos, el de escritura debe tener la forma:
NombreMetodo(Parametro : TipoDeLaPropiedad);
Y el de lectura debe ser una función
NombreMetodo : TipoDeLaPropiedad;
También podes declarar propiedades indexadas, pero eso lo dejaremos para el curso avanzado...
Si exploras el código que te he escrito, verás que la clase TDatabase no tiene un miembro Active, sino una propiedad de ese nombre.
Se ha definido de lectura/escritura, utilizando para la lectura el miembro FActive y para escritura el método SetActive. Cuando vos haces la llamada de la forma:
MiDB.Active := True;
Delphi en realidad genera una llamada al método SetActive pasandole como parámetro el valor True.
De esa forma, vos como diseñador de clases o componentes, podes ejecutar acciones tal como abrir efectivamente la base de datos, mientras el usuario de las clases únicamente cambia valores de propiedades, lo cual es muy conveniente para él.
Personalmente a mi me parece que el mecanismo ideado por el equipo de Borland para implementar las propiedades es algo impresionante y muy bueno. En mi opinión es una de las características mas poderosas de Object Pascal, y por supuesto, de Delphi.
Espero no haberte liado con la explicación. Hasta luego.
