2

Patrones GRASP, un vistazo a través de CRIAX II (Creador)

16Jun
en CRIAX-SDK, Javascript, Tutoriales

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.

  • B agrega los objetos A.
  • B contiene los objetos A.
  • B registra las instancias de los objetos A.
  • B utiliza específicamente los objetos A.
  • B tiene los datos de inicialización que serán transmitidos a A cuando sea creado (B es experto a la creación de A).
  • B es creador de los objetos A

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.

Diagrama de creador por contención

Diagrama de creador por contención

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.

En este caso la clase 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.

Diagrama de creador por contención

Diagrama de creador por contención

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.

/**
 *  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:

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.4
venta.crearLineaProducto(producto2,1);//1.25
venta.crearLineaProducto(producto3,3);//6.6

console.log(venta.total());//18.25

El código aquí mostrado es puramente didáctico.

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.

Etiquetado en:

2 Comentarios

  1. Y@i$el dice:

    ¿Por qué no publican acá la descarga de CRIAX II?

    • Nilmar dice:

      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»

Dejar un comentario

¿Eres humano? Entonces resuelve esta operación: * Límite de tiempo se agote. Por favor, recargar el CAPTCHA por favor.