"Cosa" de Negro
abril 10, 2005
 
Rescribiendo el motor de objetos
He emprendido un desafio importante, rescribir el motor de objetos de xHarbour.

La idea es obtener mejoras en estos aspectos:

Pero ya que estamos en ritmo de modificaciones, aprovecho para abrir el debate para sugerencias.
Se me ocurren un par que considero importantes.

  1. Método SUPERINIT (se aceptan sugerencias para el nombre).
    La idea es tener un método que SIEMPRE sea llamado al crear una nueva instancia de un objeto.
    Esto incluye las instanciaciones provenientes de la ejecución de __clsInst() y las provenientes de la clonacion de un objeto con OClone() o hb_arrayClone() sobre un objeto.
    Las clases heredadas ejecutan al instanciarse todos los métodos SUPERINIT existentes en su clase, tanto los propios como los heredados.
    El método recibe un parámetro que indica si el objeto fué instanciado o clonado.
    La idea de este tipo de método, no es reemplazar al método CONSTRUCTOR actual, sino funcionar de forma similar a las INIT FUNCTION.

    Algunos posibles usos son:
    • Conteo de referencias o instancias.
    • Inicialización dinámica de variables de instancia.

  2. Métodos delegados que soporten llamadas con cantidad variable de parámetros, ya que hoy sólo soporta llamadas con una cantidad fija de parámetros.

Comments:
Walter,

Me parece muy buena idea la del método superinit, aunque el nombre no termina de convercerme. VB utiliza Class_Initialize. Igualmente se podría tener un método cuando se fuese a destuir o al menos cuando se hiciese oObj := NIL

Algo que echo de menos yo personalmente son las clases amigas, y ya se que poniendo ambas en el mismo PRG es como si lo fuesen pero no siempre es posible hacerlo.
 
Si, el nombre tampoco me convence a mi, pero SUPERCONSTRUCTOR me parecía demasiado largo y hasta confuso.
Además, INIT ya existe como método heredado desde TObject.

Y como principalmente la idea es hacer inicializaciones dinámicas, lo que más se ajustaba era SUPERINIT, pero se aceptan propuestas, porque reconozco que soy mucho mejor programando que poniendo nombres.
En marqueting me moriría de hambre. :-))

El método destructor ya existe, aunque se dispara cuando el GC lo destruye realmente.
Para el caso de oObj:=nil se podría hacer una sobrecarga de operador para el operador asignación.

Si, lo de las clases amigas sería una interesante extensión.
Es algo que lo vi y me gustó leyendo un libro de C++, pero debería volver a leerlo para recordar la lógica y ver como implementarlo.
 
Publicar un comentario

<< Home

Powered by Blogger