2008/4/7 Pablo Martín Viva <[EMAIL PROTECTED]>:
> En los design patterns de GOF no hay nada parecido a lo que quiere hacer
> Personaje, de hecho a mi tambien me parece raro lo de la clase
> inicializar...

Como ya le había contestado a Alejandro, es un truquillo para que el
compilador ejecute la registracion en forma automática...

>
> Los patrones creacionales de GOF son:
>
> 1) AbstractFactory que sirve para fabricar una familia relacionada de clases
> a partir de una implementacion concreta. Por cada implementacion concreta de
> una familia de clases relacionadas tengo un factory.
>
> 2) Factory Method, cada clase derivada crea un objeto diferente a travez de
> un metodo polimorfico.

bingo!

>
> 3) Builder, Automatiza en una clase un proceso de creacion deun objeto
> complejo que se repite, dejando los detalles de la creacion a las subclases.

no conozco, buscaré!

>
> 4) Prototype, sirve para clonar objetos donde la inicializacion o el estado
> inicial no importa demasiado.
>
> 5) Singleton, crea una unica instancia de una clase usando lazy loading.

Este patrón lo uso para la factoria.

>
> Nunguno realiza lo que se requiere,  Pero tal vvez lo que se podria es tener
> un pool de objetos y tener una funcion que se invoque al cominenzo que
> mediante lazy loading o el uso de singletons los vaya registrando dentro del
> pool de objetos.

la forma de uso *sin* la clase inicializar sería algo así:

#include "Creadora.h"
#include "Creada.h"


int main()
{
   Creadora::Registrar(new Creada);
   Creadora *pcreadora = Creadora::Crear("Creada");

   // usar pcreadora

   delete pcreadora;
   return 0;
}

Qué es lo indeseado de esto, tengo que registrar las clases que quiero
en forma manual y tengo que incluir las clases derivadas que quiero
usar.

la forma de uso *con* la clase inicializar :

#include "Creadora.h"


int main()
{
   Creadora *pcreadora = Creadora::Crear("Creada");

   // usar pcreadora

   delete pcreadora;
   return 0;
}


Se ve la diferencia? no necesito registrarla porque ya se ocupó de eso
la variable global ini en el namespace anónimo. En caso de que yo cree
más clases derivadas de Creadora usando el mismo método, main no
cambia (salvo para el parámetro de Creadora::Crear, pero eso se puede
leer de un archivo o ser argumento de LC...
Lo que busco es esto. Que el cógido cliente no sepa de Registrar ni de
las clases derivadas... el tipo de clase instanciada depende sólo del
estado runtime...


Mi problema no es que esto no anda (obviamente, no anda, pero se
entiende =P ), es que si no realizo una llamada a Creada desde otro
.cpp, no se ejecuta el código de inicializacion, que es un
despropósito a mi objetivo de que no sea necesario conocer a dichas
clases desde fuera.


Saludos.

_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a