Metodos de clase para crear objetos inicializados

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?