Fábrica abstracta

Propósito

El propósito de este patrón de diseño es crear familias de objetos relacionados (normalmente por herencia), sin que sepamos sus clases concretas.

Diagrama de clases

A continuación tenemos un diagrama UML con el patrón de diseño Fábrica abstracta:

[uml]
Class.FabricaAbstracta (”FabricaAbstracta”) () (”+CrearProductoA ()”, “+CrearProductoB ()”);
classStereotypes.FabricaAbstracta (”<>”);
Class.FabricaConcretaX (”FabricaConcretaX”) () (”+CrearProductoA ()”, “+CrearProductoB ()”);
Class.FabricaConcretaY (”FabricaConcretaY”) () (”+CrearProductoA ()”, “+CrearProductoB ()”);

Class.ProductoAbstractoA (”ProductoAbstractoA”) () ();
classStereotypes.ProductoAbstractoA (”<>”);
Class.ProductoAX (”ProductoAX”) () ();
Class.ProductoAY (”ProductoAY”) () ();

Class.ProductoAbstractoB (”ProductoAbstractoB”) () ();
classStereotypes.ProductoAbstractoB (”<>”);
Class.ProductoBX (”ProductoBX”) () ();
Class.ProductoBY (”ProductoBY”) () ();

Class.Cliente (”Cliente”) () ();

FabricaConcretaX.n = FabricaAbstracta.s - (50, 30);
FabricaConcretaY.n = FabricaAbstracta.s - (-50, 30);
ProductoAbstractoA.w = FabricaAbstracta.e - (-140, -60);
ProductoAX.n = ProductoAbstractoA.s - (-35, 30);
ProductoAY.n = ProductoAbstractoA.s - (35, 30);
ProductoAbstractoB.w = FabricaAbstracta.e - (-100, 40);
ProductoBX.n = ProductoAbstractoB.s - (-35, 30);
ProductoBY.n = ProductoAbstractoB.s - (35, 30);
Cliente.s = FabricaAbstracta.n - (0, -20);

drawObjects (FabricaAbstracta, FabricaConcretaX, FabricaConcretaY, ProductoAbstractoA, ProductoAX, ProductoAY, ProductoAbstractoB, ProductoBX, ProductoBY, Cliente);

link (inheritance) (pathStepY (FabricaConcretaX.n, FabricaAbstracta.s, 10));
link (inheritance) (pathStepY (FabricaConcretaY.n, FabricaAbstracta.s, 10));
link (inheritance) (pathStepY (ProductoAX.n, ProductoAbstractoA.s, 10));
link (inheritance) (pathStepY (ProductoAY.n, ProductoAbstractoA.s, 10));
link (inheritance) (pathStepY (ProductoBX.n, ProductoAbstractoB.s, 10));
link (inheritance) (pathStepY (ProductoBY.n, ProductoAbstractoB.s, 10));
link (dependency) (pathStepX (FabricaConcretaY.e, ProductoAY.w, 10));
link (dependency) (pathStepX (FabricaConcretaY.e, ProductoBY.w, 10));
link (dependency) (pathStepY (FabricaConcretaX.s, ProductoAX.s, -40));
link (dependency) (pathStepY (FabricaConcretaX.s, ProductoBX.s, -40));
clink (associationUni) (Cliente, FabricaAbstracta);
link (associationUni) (pathStepX (Cliente.e, ProductoAbstractoA.w, 60));
link (associationUni) (pathStepX (Cliente.e, ProductoAbstractoB.w, 60));

[/uml]

Read the rest of this entry »

Scrum

Últimamente las metodologías denominadas ágiles están en boca de todos. Algunas personas piensan que este tipo de metodologías son la panacea a todos sus problemas, y no se explican cómo han podido vivir sin ellas todo este tiempo; otras sin embargo las ven como “hijas del maligno”, y no quieren oir ni hablar de nada que tenga que ver con todas ellas.

Ante todo, aquí no entraremos en cuestiones filosóficas y temas políticos, sino que abordaremos el asunto con objetividad y sin fanatismos.

Read the rest of this entry »