Leandro,
creo que estaría bueno desambiguar ciertos conceptos
antes de meterse en como se implementa la herencia. A mi personalmente
me pasó de "aprender" objetos leyendo libros de delphi y la verdad que
tenía una ensalada que ni te cuento. Llegue a hacer cosas como
obj : MiClase;
...
obj:=obj new;
je, lo interesante no solo es que compilaba, sino que hasta andaba! (al
menos en los delphis 1, 2 y 3 si mal no recuerdo). Luego aparecen
errores esporádicos imposibles de debuggear :P. Pero bueno, dejando de
lado lo anecdótico:
- En los lenguajes OO basados en clases (Java, St) todos los objetos son
instancia de una clase y la forma de crear un objeto (de "traerlo a la
vida") es pidiéndole a la clase que lo haga (y generalmente esto se hace
con el mensaje #new o similar). Ejemplo:
juan:=Persona new.
- Cuando mandás un mensaje a un objeto lo que hace la máquina virtual es
buscar en la clase de ese objeto una implementación (método) que machee
con el mensaje. Por ejemplo si hacés:
juan nombre
lo que va a pasar es que la VM busca la clase del objeto "juan" (que es
Persona) y le pide que le de el método asociado al mensaje #nombre. Si
la clase lo tiene se lo da a la VM para que lo ejecute en el contexto
del receptor (en este caso "juan"). Si no lo tiene aparece un error. O
sea que una clase tiene, en principio, dos roles:
1. Crear sus instancias.
2. Funcionar como repositorio de comportamiento común a todas sus
instancias.
- Entre clases (ojo, no entre objetos) se pueden establecer relaciones
de herencia. Cuando una clase A hereda de otra B se dice que B es
subclase de A (y A es la superclase de B). Al heredar B de A se dice que
se hereda todo el comportamiento y acá es donde entraría tu pregunta
(creo), que es ¿cómo se implementa dicha herencia? El mecanismo se
conoce como method lookup (y si la memoria no me falla el gran Hernán
Wilkinson tiene una tesis de grado muy buena relacionada con esto[*]) y
es mas o menos así:
instanciaDeB:=B new.
instanciaDeB hola.
al mandar el mensaje #hola a "instanciaDeB" se hace lo mismo que te
comenté anteriormente: la VM busca la clase y le pide el método que
implementa #hola. Si lo encuentra se evalúa en el contexto de
"instanciaDeB". Ahora bien, si no lo encuentra en realidad no tira un
error tan rápido, sino que sale a buscar en la superclase de B (o sea,
A) a ver si en esa clase no está el bendito método. Si lo encuentra pasa
lo mismo que antes (lo evalúa en el contexto de "instanciaDeB") y sino
sigue buscando. Hasta donde? En el caso de Smalltalk la búsqueda se hace
hasta Object (que vendría a ser algo así como la superclase de todas las
clases) y si no lo encuentra recién ahí se tira el error.
No se si esto responde tu pregunta. Por el tema de los bytecodes y de
convertir dos objetos en uno la verdad que no se a que apunta tu amigo.
De última si hasta acá venimos bien podemos ver un poco sobre la
generación de bytecodes (o sino parafrasea la pregunta y tratamos de
encontrarle la vuelta :))
[*] Che Hernán, está colgada en la web tu tesis?
Saludos,
Andrés
Leandro Martín Malsam escribió:
> por ahí el subject suena a novato, pero ahora entenderán.
> participando en un foro de mi facultad, encontré el siguiente "dilema"
> posteado por un usuario:
>
> *Habiendo ido el sabado a la tarde a la PyCon, escuche al tipejo de Google
> quejarse de el excesivo envio de mensajes entre objetos.
> Recien estuve chusmeando un poco, y me entero de que casi todos los
> lenguajes OO, cuando creas un objeto A que hereda de B, la maquina virtual
> crea un objeto A, un objeto B, y los relaciona.
> ¿Porque?
> ¿No es mas comodo y eficiente, crear un objeto A con las caracteristicas de
> B?
> osea, que en el codigo fuente, A herede de B, pero cuando todo se convierta
> a bytecode, estos "dos objetos" se conviertan en uno solo...
> Probablemente no me se explicar la idea... pero bue, ustedes entenderan :P.*
>
>
> se entendió? creo que la pregunta de mi compañero es clara. y bueno, como yo
> soy medio novato en estas cosas, no tuve mejor idea que trasladarles la
> inquietud a los eruditos de la materia, de quienes siempre se aprende algo.
>
> así que si se copan y nos iluminan un poco, les agradecemos.
>
> salu2
>
> lea
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
http://www.clubSmalltalk.org
-~----------~----~----~----~------~----~------~--~---