Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: astinx en 20 Febrero 2012, 22:32 pm



Título: Pregunta sobre herencia en SmallTalk
Publicado por: astinx en 20 Febrero 2012, 22:32 pm
Hola, tengo una duda acerca de herencia en SmallTalk.
Supongamos lo siguiente: Tenemos una clase A, con atributos x e y, disponemos de los métodos #x:unValor, #y:otroValor, #x e #y. Es decir de los métodos para establecer y obtener los valores de los atributos. Ahora también hemos sobreescrito el new, de manera que no se pueda hacer referencia a él, algo como:
#new
Código:
^(self error: 'Debe usarse el constructor apropiado en esta clase').

Hemos creado el constructor de esta clase que sería algo como:
Código:
x:unValor y:otroValor
^(super new x:unValor; y:otroValor).

Ahora supongamos que creamos una clase hija B, con el atributo adicional z, y tambien creamos los métodos para obtener y establecer el valor del atributo z. Vamos a crear el constructor. Sobreescribimos el método #new, de la misma manera de antes y creamos el constructor. Quedaria de la siguiente manera:
Código:
x:unValor y:otroValor z:elUltimoValor
^((super x:unValor y:otroValor); z:elUltimoValor).

Mi duda es la siguiente: ¿Como esto puede funcionar?, es decir estamos utilizando un constructor de la clase padre, por lo tanto
Código:
super x:unValor y:otroValor
nos devuelve una instancia de la clase A, y la clase A no tiene porque entender el mensaje z, si bien lo implementa sus hijos, no lo implementa el padre así que no tendría porque conocer ese mensaje.

¿Tienen alguna idea de que podría ser lo que no estoy viendo?, ¿Obvie algo del POO?, ¿Hay algo que hice que no debí haber hecho?, ¿Sobreescribir el #new?

Muchas gracias por detenerse a leer.