[Madrid-pm] Construcción e inicialización de objetos

DervishD bugs en dervishd.net
Mar Abr 3 06:24:58 PDT 2007


    Hola Victor :)

 * Victor Moral <victor en taquiones.net> dixit:
> > Por eso precisamente decía "por turnos": en el caso de herencia
> > múltiple, no vale con usar SUPER, hay que ir padre por padre
> > invocando el método correcto. Si usas SUPER::init, encontrará el
> > método init de uno sólo de los padres.
> 
> Hasta cierto punto, porque si las clases de las que estás heredando
> están "bien" implementadas su método "init" debería ser algo como:

    No me refería a verticalmente, sino horizontalmente: si heredas de
más de un padre, usando SUPER no puedes invocar los "init" de todos
ellos, sólo del primero que se encuentre al hacer $self->SUPER::init().

> > Otra razón por la que no me acaba de gustar la herencia múltiple,
> > pero bueno. Y es cierto lo que dices de SUPER, pero de momento habrá
> > que apañarse con eso.
> 
> Échale un vistazo si tienes ganas a Class::C3 y horrorizate con lo que
> llega a hacer en la tabla de símbolos. Del depurador te puedes olvidar
> inmediatamente y buscarte otro medio.

    Me estás asustando XDDD Probablemente le eche un ojo, porque ya me
come la curiosidad ;)))

> > > Interesante. ¿ No lo separas ni siquiera en la implementación ? Yo
> > > uso algo como esto:
> >
> > Sí, en la implementación sí lo hago, pero no exporto el método
> > "init". Y bueno, para ser sincero, no siempre uso un método "init"
> > si la inicialización es muy simple y no espero derivar de la clase.
> 
> Ya, yo es que tiro mucho de plantillas para crear los fuentes y entran
> siempre que estoy tratando con clases. Y, por cierto, ¿ qué quieres
> decir con que no "exportas" un método ? ¿ Una confusión por aquello de
> que los métodos no se exportan ? :-)

    No, es que estaba pensando en C O:))) Los métodos que no "exporto"
en C están declarados como "static" en el fuente. No entro en detalles
de cómo implemento la encapsulación porque eso sí es completamente
offtopic O:)) En Perl no oculto los métodos. Alguna vez se me ha
ocurrido, para evitar que un método que es "privado" se use es comprobar
el primer parámetro que recibe, y si es un objeto se lanza una
excepción. Lo malo es que esto sólo funciona en tiempo de ejecución.
¿Hay alguna forma de hacer un método privado?
 
> > Yo opino parecido, sólo que algunas veces ni siquiera separo en el
> > lado de la implementación, según me parezca. Tampoco he programado
> > muchos diseños orientados a objetos en Perl, el grueso lo he hecho en C.
> 
> Ah, es que yo ya he construído una aplicación OOP y estoy con otra ahora 
> mismo. Es interesante comparar los puntos de vista.

    Yo en Perl no he hecho ninguna aplicación, sólo he hecho scripts,
precisamente para entrenar y poder constuir un framework para
aplicaciones completas. Orientado a objetos he hecho de momento un
módulo para gestión de errores y excepciones, pero tampoco es OO puro,
porque tiene parte de procedural (se va a usar en ciertos scripts que
sería mejor no cambiar de momento, así que...).

    Y sí, es muy interesante comparar los puntos de vista, sobre todo
cuando con ello aprendes, como hago yo ;)

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736 | http://www.dervishd.net
It's my PC and I'll cry if I want to... RAmen!


Más información sobre la lista de distribución Madrid-pm