lunes, 1 de diciembre de 2008

modifying constructors

En smalltalk es una práctica común (por lo que he visto) hacer muchas funciones para crear un objeto determinado, es decir, hacer una creadora enganchada a uno o varios setters.

De un objeto paquete, podriamos tener las siguientes creadoras:

new
createWithContent:
createWithContent:andDestination:

Bien, como bien sabemos, todo es un objeto y todo eso... y cuando decimos todo es TODO. las instancias son objetos, las funciones son objetos, las clases son objetos... y claro, si las clases son objetos, la particularidad que tienen es que son capaces de crear otros objetos (las simples instancias no pueden).

Para hacer nuevas constructoras de clase, debemos modificar la clase, o sea pinchar en 'Class', y definir la nueva funcion ahi.

createWithContent: aString
|temp|
temp := self new.
temp content: aString.
^temp.

De esta forma, hemos creado una nueva funcion constructora, que aprovecha el viaje para setear un valor.

Si analizamos lo que hace es bien sencillo. simplemente notar que self new se refiere a Paquete new , o sea, la creadora que hubieramos llamado si no tuvieramos el parametro extra. new es un metodo que implementan las Clases, no las instancias.

Log donde aprendí esto (en català) : http://raimonster.googlepages.com/smalltalk3_new_initialize.txt .

Gracias a Gerard por la ayuda.