carolina perozo julio padrón anthony accardi patrones de diseño

27
Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Upload: remedios-del-real

Post on 23-Jan-2016

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Carolina PerozoJulio Padrón

Anthony Accardi

Patrones de Diseño

Page 2: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Factory Method

Page 3: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Factory Method

Patrón de Creación

Propósito:

Define una interfaz para crear un objeto pero

deja que sean las subclases quienes decidan la

clase del objeto a crear

Tambien conocido como

Virtual Constructor

Page 4: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Motivación Factory Method

Sea un framework para la construcción de editores de documentos de distintos tipos

Clases abstractas Application y Document

Los clientes deberán heredar de ellas para implementar los detalles de cada aplicación concreta

• Por ejemplo DrawingApplication y DrawingDocument

¿Como se implementa la opción New del menú?

• ¿Como sabe la clase Application qué tipo concreto de documento debe crear?

Page 5: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

¿Cuál es el problema?

Se nos presenta el dilema de que el framework es quien

sabe, a través de su clase Application, cuándo se debe crear un

nuevo documento, pero no sabe qué documento crear (sólo

conoce a la clase abstracta o interfaz Document)

Solución:

Encapsular el conocimiento de cuál es la subclase concreta

del documento a crear y mover ese conocimiento fuera del

framework

Motivación Factory Method

Page 6: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Motivación Ejemplo Factory Method

Page 7: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Aplicabilidad Factory Method

Útil cuando:

• Una clase no puede anticipar la clase de objetos que debe crear.• Una clase quiere que sus subclases especifiquen los objetos a crear.

Page 8: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Estructura UML Factory Method

Page 9: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Actores Factory Method Product (Document)

Define la interfaz de los objetos creados por el método de fabricación.

Concrete Product (MyDocument) Implementa la interfaz Product.

Creator (Application) Declara el método de fabricación, que devuelve un objetode tipo Product.

• Puede definir una implementación que devuelva el producto concreto predeterminado.

Puede llamar a dicho método para crear un objeto producto.

ConcreteCreator (MyApplication) Redefine el método de fabricación para devolver un objeto ConcreteProduct.

Page 10: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Colaboración Factory Method

El creador se apoya en sus

subclases para

definir el método de fabricación que

devuelve el objeto apropiado

Page 11: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Consecuencias Factory Method

Elimina la necesidad de enlazar clases especificas de la aplicación en el código

Sólo maneja la interfaz Product

• Por lo que permite añadir cualquier clase ConcreteProduct definida por el usuario.

Permite escribir algoritmos genéricos que funcionan con cualquier ConcrteProduct

Inconveniente: Tener que crear una subclase de Creator en los casos en los que esta no fuese necesaria de no aplicar el patrón

Page 12: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Abstract Factory

Page 13: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Abstract Factory

El patrón Abstract Factory ofrece una interfaz para la creación de familias de productos relacionados o dependientes sin especificar las clases concretas a las que pertenecen.

Problema Aborda el problema de la creación de familias de objetos (como por ejemplo iterfaces gráficos) que comparten toda una serie de características comunes.

Aplicabilidad El uso de este patrón está recomendado para situaciones en las que tenemos una familia de productos concretos y prevemos la inclusión de distintas familias de productos en un futuro.

Page 14: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Estructura Abstract Factory

Page 15: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

AbstractFactory (WidgetFactory): Declara un interfaz para las operaciones de creación de objetos de productos abstractos.

ConcreteFactory (MotifWidgetFactory, PMWidgetFactory): Implementa las operaciones para la creación de objetos de productos concretos.

AbstractProduct (Window, ScrollBar): Declara una interfaz para los objetos de un tipo de productos.

ConcreteProduct (MotifWindow, MotifScrollBar): Define un objeto de producto que creará la correspondiente Concrete Factory, a la vez que implementa la interfaz de AbstractProduct.

Client: Usa solamente las interfaces declaradas por las clases AbstractFactory y AbstractProduct.

Participantes Abstract Factory

Page 16: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

AplicabilidadAbstract Factory

Usar cuando:

• Un sistema debe ser independiente de cómo se crean, componen y representan sus productos.

• Un sistema debe ser configurado con una familia de productos entre varias.

• Una familia de objetos producto relacionados está diseñada para ser usada conjuntamente y es necesario hacer cumplir esa restricción.

• Se quiere proporcionar una biblioteca de clases de productos y sólo se quiere revelar sus interfaces, no sus implementaciones.

Page 17: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Ejemplo Abstract Factory

Page 18: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Consecuencias Abstract Factory

Ventajas:• Aisla las clases de implementacion: ayuda

a controlar los objetos que se creen y encapsula la responsabilidad de creación.

• Hace fácil el intercambio de familias de productos sin mezclarse, permitiendo configurar un sistema con una de entre varias familias de productos:

Cambio de factory Cambio de familia.

• Fomenta la consistencia entre productos.

Page 19: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Consecuencias Abstract Factory

Desventajas:

Puede ser difícil incorporar nuevos tipos de productos (cambiar AbstractFactory y sus factorias concretas).

Page 20: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Iterator

Page 21: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Iterator

Definición

El patrón ITERATOR define una interfaz que declara los métodos necesarios para acceder de forma secuencial a una colección de objetos. Las clases que utilizan esta interfaz para acceder a los objetos lo hacen de forma independiente de la clase que implementa la interfaz. El acceso a la estructura interna de la colección a través de la interfaz del iterador hace que ésta permanezca oculta.

ObjetivoProveer una forma de tener acceso secuencial a los

elementos de un objeto agregado sin tener que exponer su representación interna.

Page 22: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Iterator

Aplicaciones• Para acceder a los contenidos de los objetos incluidos en un

agregado sin exponer su estructura.• Para poder soportar diversas formas de recorrer un

agregado de objetos.• Para ofrecer una interfaz uniforme para recorrer distintos

tipos de estructuras de agregación.

Tipos• Iteradores externos: el cliente avanza solicitando una

operación de cada elemento.• Iteradores internos: el cliente le proporciona al iterador

la operación que debe aplicar sobre todos los elementos.

Page 23: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Estructura Iterator

Page 24: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Iterator

Participantes• Iterador: Define la interfaz para acceder y recorrer los

elementos de un agregado.• IteradorConcreto: Implementa la interfaz del iterador y

guarda la posición actual del recorrido en cada momento.• Agregado: Define una interfaz para crear un objeto

iterador.• AgregadoConcreto: Implementa la interfaz de creación de

iteradores devolviendo una instancia del iterador concreto apropiado.

Consecuencias• Soporta distintas formas de recorrer un agregado.• Los iteradores simplifican la interfaz de los agregados.• Es posible recorrer un mismo agregado utilizando más de

un iterador al mismo tiempo

Page 25: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Iterator

Page 26: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

class List { public:   List ();   int Count() const;   int &Get(int index) {return info[index];}   int Read(int index);   ~List() {delete info;} private:   int *info; };

class Iterator{ public:         virtual void First(){}         virtual void Next(){}         virtual int IsDone(){ return 0; }         virtual int CurrentItem(){ return 0; } };

class ListIterator: virtual public Iterator { public:         ListIterator(List* aList,int c=0);         void First();         void Next();         int IsDone();         int CurrentItem(); private:         List* _list;         int _current; };

class BackIterator: virtual public Iterator { public:         BackIterator(List* aBack);         BackIterator(List* aBack,int c=0);         void First();         void Next();         int IsDone();         int CurrentItem(); private:         List* _back;         int _current; };

Page 27: Carolina Perozo Julio Padrón Anthony Accardi Patrones de Diseño

Iterator

Cuando un cliente desee recorrer una lista hacia adelante o hacia atrás crea una instancia de ListIterator o de BackIterator y realiza el recorrido de la siguiente manera: (Suponiendo que la instancia es iter)                

for (iter->First() ; !iter->IsDone() ; iter->Next())           {                    // Aquí se realizan las operaciones que se deseen              }