Pregunta sobre herencia en SmallTalk

Iniciado por astinx, 20 Febrero 2012, 22:32 PM

0 Miembros y 1 Visitante están viendo este tema.

astinx

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
^(self error: 'Debe usarse el constructor apropiado en esta clase').

Hemos creado el constructor de esta clase que sería algo como:
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:
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 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.
La programación hoy en día es una carrera entre los ingenieros de software intentando construir mejores y más eficientes programas a prueba de idiotas y el Universo intentando producir mejores y más grandes idiotas. De momento, el Universo está ganando