miércoles, agosto 09, 2006

Declarando clases en Delphi .Net

Algunos de mis amigos que han programado en Delphi (win32) me han preguntado y comentado que han tratado de hacer un programa en Delphi .Net pero que nomas no le han entendido muy bien, para empezar pues tenemos que mentalizarnos que las cosas van a ser diferentes, que vamos a usar un "Framework nuevo" y por lo tanto las clases disponibles cambian, la migracion no es tan sencilla como podria parecer... Pues vamos a ir viendo poco a poco algunas diferencias....

Lo primero que vemos que cambia para los que estamos acostumbrados al Delphi win32, son que las clases traen nuevos atributos de visibilidad para los miembros de la clase (que algunos tambien entran para win32 a partir de BDS 2005), en Delphi existen las siguientes palabras reservadas para especificar la visibilidad de un miembro: private, protected, public, published, strict private, strict protected y automated (esta ultima es solo para win32), de ahi que la declaracion de una clase en delphi .Net puede llevar la siguiente estructura:

UnaClase = Class
strict private
... // declaraciones strict private en esta seccion
strict protected
... // declaraciones strict protected en esta seccion
private
... // declaraciones private
protected
... // declaraciones protected
public
... // declaraciones public
published
... // declaraciones published
end ;



Cabe destacar que no es necesario indicar cada una de las secciones, una clase solo puede constar de private y public o inclusive sin definir ninguna, si no se especifica por default son published si esta activo {$M+} o de lo contrario son public, es valido declarar una clase asi:


UnaClase = Class(System.Object)
private
... // declaraciones private
public
... // declaraciones public
end ;


Recordemos que nuestra "mother" es la clase System.Object {UnaClase = Class(TObject) es lo mismo} , por default todas las clases derivan de esta clase y si no se especifica pues de todos modos desciende de la clase Object, ssss, a huevo...

Y que diantres significa todo esto? pues es solo el nivel en el que son visibles los miembros de una clase (sea metodo o campo), un miembro strict private es visible solo dentro de la clase en la que se declararon, un miembro strict protected puede ser accesado dentro de la clase en que se declara y desde cualquier clase descendiente sin importar donde sea declarada, los miembros declarados como private son visibles dentro de toda la unidad (Unit xxx) donde esta la clase declarada, los miembros declarados protected tienen la misma visibilidad del private, mas aparte pueden ser accesados desde cualquier clase descendente declarada en otra unidad diferente, un miembro public es visible desde cualquier lado en que la clase pueda ser referenciada, por ultimo un miembro published tiene la misma visibilidad que un miembro publico, la diferencia es que un miembro published genera informacion extra llamada "runtime type information" (RTTI) esta informacion se usa principalmente para mostrar las propiedades en el Object Inspector en tiempo de diseño....

Bueno, es todo por hoy, espero y no se haya hecho demasiado aburrido, pero asi podemos empezar comprendiendo mejor desde la declaracion de las clases e ir entrando poco a poco a .Net, los que ya saben todo esto pues si estoy echando mentiras no duden en hacermelo saber y asi aprender mas :)), tambien cualquier critica, comentario, sugerencia, queja, etc....

Saludos a Fernando Hernandez que hoy me lo encontre en el messenger...

2 comentarios:

Anónimo dijo...

Acabo de enterarme de tu blog, y pues aqui te va mi comentario... FELICIDADES, y no te aguites, por algo se empieza (je, je)
Bueno pues, estaremos dandole una revisada para ver que se nos pega. Atte. "El Irwing"

-Kylix- dijo...

Ah muchas gracias "Irwing", hoy no se me pasa publicar otro post...