lunes, 14 de enero de 2008

Nuevo en Delphi #1: Datos de Clase

Primero, una disculpa por esperar tanto para comenzar con la serie de Lo nuevo en Delphi, esta semana pasada fueron días interesantes en los proyectos y el tiempo fue lo primero que se acaba.

Quiero empezar a mencionar las nuevas características de Delphi, abarcando 2006 y 2007, ya que muchas de estas se iniciaron en Delphi 2006 pero se consolidaron en Delphi 2007. El objetivo es analizarlas, saber que tan útiles podrían ser y en donde aplicarían.

Una de las que mas me llamo la atención de inicio son los datos de clase (o Class Data).

Tener datos de clase consiste en tener variables que existen desde que la clase existe (no por objeto o instancia de la clase). Hasta ahora Delphi contaba solo con Métodos de clase.

Los campos/datos/variables de clase pueden ser accesados por todos los objetos de esa clase y pueden ser declarados con los mismos restrictores de acceso (private, public, protected, etc.) de los datos de objeto.

Estos datos compartidos por todas las instancias de una clase son parte de la sintaxis de muchos otros lenguajes pero mas que nada es una técnica cercana de Programación orientada a objetos (POO). Puede usarse, por ejemplo, para controlar datos variables entre muchos threads de cierta clase o heredadas de la misma clase, semáforos, o conteo de instancias y muchas otras cosas.

Claro que podemos usar variables globales para eso desde siempre. Aun así, esta nueva forma del lenguaje hace el código mas legible y mejora la estructura ya que la variable tiene relación explicita directa con la clase. Al final, la ventajas de esta nueva característica es hacer el código Delphi win32 mas cercano al de Delphi.Net, además de acercarnos a una mejor estructura de POO.

La forma de declarar variables de clase es usando la sección opcional class var en loa declaración de la clase. Un ejemplo podría ser el siguiente:

TCualquierClase = class
private
FiDato: integer;
FsNombre: string;
class var
Control: integer;
//Dato de clase
OtroDato: TStringList; //Otro dato de clase
public
Nombre: string;
...
end;


En este caso, el valor de Control y OtroDato serán datos compartidos por todas las instancias de TCualquierClase mientras que FiDato, FsNombre y Nombre son datos particulares de cada instancia.



En un futuro (yo espero y ruego) mediante esta característica también seria mas fácil y claro implementar soporte multihilo (multithread-safe) en todo el lenguaje y la VCL, así como tiene actualmente Java en su respectiva, pero sin que sea necesario correr los programas dentro de un ambiente "controlado" y restringido como la máquina virtual.

No hay comentarios.:

Publicar un comentario