A veces, es necesario inicializar alguna/s de la/s variable/s de un objeto, con objetos fijos, o con objetos que hay que pasarle apenas se crea el objeto.
Para esto hacemos un método al que por convención se lo llama initialize, y le enviamos el mensaje correspondiente a cada objeto que creamos desde el workspace. Por ejemplo
#Camion
initialize
viajes := Set new.
desgasteDeLasRuedas := 0.
puedeViajar := true.
chofer := unFercho
chofer := unFercho
"... en el workspace ..."
elReyDelAcceso := Camion new.
elReyDelAcceso initialize.
elReyDelAcceso conductor: cacho.
"cacho lo tenía creado más arriba en el workspace"
Ahora bien, serían muy felices dos cosas
Con la lazy inicialization, puedo lograr lo primero pero no lo segundo.
Una forma de lograr las dos cosas es definir un método de clase que tiene como objetivo crear un objeto ya configurado y listo para usar.
¿Cómo hacemos? Fácil
#Camion class
nuevoConducidoPor: unFercho
| camionNuevo |
camionNuevo := self new.
camionNuevo initialize.
camionNuevo chofer: unFercho.
^camionNuevo
Vemos que el método
En el workspace nos queda
elReyDelAcceso := Camion nuevoConducidoPor: cacho.
¿qué ganamos?