Hola invitado         31 Jul, 2010 - 07:54
Menú principal
 
Ads
 
Patrocinadores
 
Anuncios
 
© 2009 PortalFox
El huevo o la gallina, ¿Propiedades o métodos? (Christof Wollenhaupt) Traducción lecturas 2417
 Enviado por amby en Lunes, 19 Febrero, 2007
Artículos En este escrito, el autor demuestra y concluye que las propiedades existen antes de que existan los métodos. Muy interesante.

El huevo o la gallina, ¿Propiedades o métodos?

Artículo original: Egg or Chicken, Properties or Methods? http://www.foxpert.com/knowlbits_200701_6.htm Autor: Christof Wollenhaupt (http://www.foxpert.com/knowlbits.htm) Traducido por: Ana María Bisbé York (amby@telefonica.net) Para: PortalFox (http://www.portalfox.com)


En Visual FoxPro se pueden utilizar expresiones para iniciar propiedades. Estas expresiones son evaluadas una vez que carga la primera vez la clase en la memoria. El resultado se guarda en el objeto de clase. Para crear una expresión para una propiedad, puede, o entrar el signo igual en la ventana Propiedades seguido por la expresión, o presionar el botón "fx" que está junto al botón Zoom, en la ventana Propiedades.

He mostrado en varias ocasiones que estas expresiones pueden incluir THIS. La referencia apunta al objeto clase, no al objeto que está creando. De hecho, THIS ni siquiera apunta a un objeto de la misma clase. Si solamente accede a las propiedades del objeto clase, no notará la diferencia.

No obstante, si intenta llamar a un método debe tener en cuenta que las propiedades son evaluadas antes que los métodos. ¿Esto qué significa? Cree una clase "Level1" basada en Form y guárdela en Level1.VCX. Agregue el método "CallMethod" con el siguiente código:

Activate Screen
? "Llamada ", This.Class

Ahora, añada la propiedad nTest y asigne la siguiente expresión:

=This.CallMethod()*2

En la ventana de comandos escriba:

Clear All
Release All
Clear
ox = NewObject("Level1","Level1")
? ox.nTest

Notará dos cosas. La pantalla está vacía y nTest es .F., no 2. La razón para esto es que, en el momento en que es evaluada la expresión, aún no ha sido adjuntado el código al método. CallMethod existe; pero está vacío. Ahora, permítame avanzar a un punto superior. Crear un programa ShowInfo.prg con el siguiente contenido

Lparameters toRef
? toRef.Class
toRef.CallMethod()
Return 1

Cree una nueva clase Level2 que hereda de Level1. Almacene la nueva clase en Level2.vcx. Sobreescriba CallMethod con este código:

Activate Screen
? "Subclase llamada ", This.Class

Ahora active la ventana Comandos y escriba:

Clear All
Release All
Clear
ox = NewObject("Level2","Level2")

Esta vez puede ver la siguiente salida:

Level2
Called Level2

Cuando se carga la clase, ya está claramente llamado el método ShowInfo. La llamada del método también trabaja, al menos en alguna medida. En lugar de ejecutar el código en la clase Level2, ahora ejecuta el código desde la clase Level,1 que no ha sido ejecutada cuando se instancia el Level1.

Lo que ocurre es que cuando instancie Level2, Visual FoxPro, crea primeramente un objeto para Level1. Esto ocurre en dos pasos. Primero, son evaluadas todas las propiedades. Luego, se añaden todos los métodos. Como se ha pedido Level2, Visual FoxPro, crea luego el objeto para Level2. VFP crea una copia para la clase Level1 incluyendo el código del método. Como antes, las propiedades se evalúan primero. En este momento, CallMethod combina aun el código que ha sido copiado desde la clase de Level1.

Únicamente después de que todas las propiedades hayan sido evaluadas, Visual FoxPro agrega los códigos de los métodos a la clase Level2. Si crea una variable pública en ShowInfo.prg y guarda toRef en esa variable, obtiene una referencia a la clase. Cuando ejecuta CallMethod() en este objeto global  después de crear una instancia, obtiene además el código de la subclase.

Por tanto, recuerde: Las propiedades existen antes de que existan los métodos. Si no desea crear estas clases por si mismo, las puede descargar desde aquí:

http://www.foxpert.com/files/EggOrChicken.zip


 Versión imprimible  
El huevo o la gallina, ¿Propiedades o métodos? (Christof Wollenhaupt) Traducción | Entrar/Crear una cuenta | 0 Comentarios
Los comentarios son propiedad de sus respectivos autores.
No somos responsables de su contenido.



Todas las marcas y los logos utilizados en este sitio son propiedad de sus respectivos dueños.
Los artículos, noticias y comentarios son propiedad y responsabilidad de sus respectivos autores.
Copyright © 2000-2010 PortalFox. Todos los derechos reservados.