Patrones GRASP, un vistazo a través de CRIAX II (Creador)
Holas comunidad continuando con la serie de patrones GRASP, en el post anterior hablamos del patrón Experto, hoy les hablaré del patrón Creador.
Solución: asignarle a la clase B la responsabilidad de crear una instancia de la clase A en uno de los siguientes casos.
Bagrega los objetosA.Bcontiene los objetosA.Bregistra las instancias de los objetosA.Butiliza específicamente los objetosA.Btiene los datos de inicialización que serán transmitidos aAcuando sea creado (Bes experto a la creación deA).Bes creador de los objetosA
Si existe más de una opción utilizar las opciones 1 y 2.
Principio general para asignar la responsabilidad de la creación de objetos:
Quién debería encargarse de crear una instancia de …
La clase que agrega, contenga o realice otras operaciones sobre un tipo de instancia, es posible candidata para ser creadora de ese objeto.
La clase incluyente del contenedor es idónea para asumir la responsabilidad de crear la cosa contenida.
El concepto agregación se utiliza al examinar el patrón Creador. La agregación incluye cosas que están en sólida relación de parte todo.
- cuerpo agrega pierna
- cuerpo contiene pierna
- cuerpo está estructurado por pierna
Otra situación del patrón Creador:
En ocasiones encontramos un patrón Creador buscando la clase con los datos de inicialización que serán transferidos durante la creación.
Para saber quien va a crear:
Que clase es la que tiene los datos que hacen falta para crear el objeto …
Trabajar con el patrón Creador brinda soporte a un Bajo acoplamiento. La clase creada tiende a ser visible a la clase creador.
Ejemplo
En una tienda de productos, quién debería crear los objetos de VentaLineaProducto.
Pregunta 1: Quién debería encargarse de crear una instancia de VentaLineaProducto.
- Ver que clases agregan o contienen la clase
VentaLineaProducto.
Venta puede contener varias instancias de VentaLineaProducto, que se necesitan para el subtotal. Se puede crear un método llamado crearLineaProducto en la clase Venta en la cual, con cada producto nuevo se cree un objeto de tipo VentaLineaProducto que se utilizará despues en el método total. A este método se le pasaría tambien la cantidad del producto a crear.
Conclusiones
La clase Venta agrega los objetos VentaLineaProducto.
Codificación
Para llevar a cabo la codificación comenzamos traduciendo el diagrama obtenido a código. Para ello partimos del código anterior del patrón Experto. En este caso la clase a modificar será Venta solamente. En la misma creamos el método público, auxiliándonos de los snippets específicamente del General. Nombramos al método crearLineaProducto pasándole como parámetros una instancia de EspecificacionProducto y la cantidad del producto.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /** * metodo para crear las instancias de VentaLineaProducto * * @method crearLineaProducto * @public * @param producto {EspecificacionProducto} el producto * @param cantidad {Integer?1} la cantidad del producto * */crearLineaProducto : function(producto, cantidad){ var cantidad = cantidad || 1; criax.oop.TypeHinting.tHClass(EspecificacionProducto,producto); this.add(new VentaLineaProducto(producto, cantidad));} |
De esta manera ejecutando el código creado, en el main de Application:
1 2 3 4 5 6 7 8 9 10 | var producto1 = new EspecificacionProducto("Primer producto",5.2);var producto2 = new EspecificacionProducto("Segundo producto",1.25);var producto3 = new EspecificacionProducto("Tercer producto",2.2);var venta = new Venta();venta.crearLineaProducto(producto1,2);//10.4venta.crearLineaProducto(producto2,1);//1.25venta.crearLineaProducto(producto3,3);//6.6console.log(venta.total());//18.25 |
Hasta aquí la segunda parte del artículo de los patrones GRASP, espero dejen sus impresiones. En el próximo estaremos hablando del patrón Bajo Acoplamiento.







¿Por qué no publican acá la descarga de CRIAX II?
La primera razón realmente es lo trabajoso de pasar algo para el servidor debido a los horarios y a que estoy en una red diferente, la otra es la del peso de las versiones de CRIAX. Si deseas la plataforma puedes contactarme a nilmar@uci.cu, y en el asunto pon «Sobre CRIAX-SDK»