La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Geykel Raul Moreno Ceballos Sherpa Chairman & Chief Software Architect Adapter (Wrapper) Structural Pattern (Patrón Estructural)

Presentaciones similares


Presentación del tema: "Geykel Raul Moreno Ceballos Sherpa Chairman & Chief Software Architect Adapter (Wrapper) Structural Pattern (Patrón Estructural)"— Transcripción de la presentación:

1 Geykel Raul Moreno Ceballos Sherpa Chairman & Chief Software Architect Adapter (Wrapper) Structural Pattern (Patrón Estructural)

2 Intención Convierte la interfaz de una clase en una interfaz que el cliente espera. Adapter permite que clases con interfaces incompatibles puedan trabajar de conjunto.

3 Motivación En algunas ocasiones un toolkit de clases diseñado de forma tal que se pueda reusar no es reusable debido que su interfaz no se corresponde a la interfaz del dominio especifico que requiere la aplicación. Consideremos por ejemplo un editor de dibujo que permite al usuario dibujar y ordenar elementos graficos (lineas, poligonos, textos, etc.)

4 Motivación La clave de abstracción del editor son objetos gráficos, que tienen una forma editable y pueden dibujarse ellos mismos. La interfaz para objetos gráficos está definida por la clase abstracta Shape El editor define una subclase de Shape para cada objeto grafico: LineShape para las líneas, PolygonShape para los polígonos, TextShape para texto…

5 Motivación Por ejemplo TextShape puede mostrar y editar texto, generalmente este tipo de clase es difícil de implementar, supongamos que el toolkit de clases del usuario ya provee una clase TextView que realiza estas acciones, idealmente nos gustaría utilizar TextView para implementar TextShape pero este toolkit no fue diseñado teniendo en cuenta la clase Shape por lo tanto no podemos intercambiarlas.

6 Motivación ¿Cómo pueden clases desligadas como TextView trabajar en una aplicación que espera clases con interfaces diferentes e incompatibles?

7 Motivación Podemos cambiar TextView de forma tal que se adapte a la interfaz de Shape, pero esa no es una opcion a menos que tengamos el codigo fuente del toolkit; de lo contrario, podemos definir TextShape de forma tal que adapte la interfaz de TextView a la de Shape. Esto se puede hacer de dos formas:

8 Motivación 1.Heredando la interfaz de Shape y la implementación de TextView, o 2.Creando una instancia de TextView en TextShape e implementar TextShape en términos de la interfaz de TextView. Llamamos a TextShape como “adapter”

9 Motivación

10 Aplicación Usa el patrón Adapter cuando: 1.Deseas usar una clase y su interfaz no se corresponde con la que necesitas. 2.Quieres crear una clase reusable que coopere con clases inesperadas, o sea, clases que no necesariamente tengan interfaces compatibles. 3.Necesitas usar varias subclases existentes, pero no es práctico adaptar sus interfaces subclassing cada una de ellas. Un object adapter puede adaptar las interfaces de su clase progenitora.

11 Estructura Un class adapter usa herencia múltiple para adaptar una interfaz a otra:

12 Estructura Un object adapter se apoya en la composición del objeto:

13 Participantes -Target: Define la interfaz del dominio específico que el cliente usa. -Client: Colabora con objetos de acuerdo a la interfaz de Target. -Adaptee: Define una interfaz existente que necesita ser adaptada. -Adapter: Adapta la interfaz de Adaptee a la de Target.

14 Colaboración Client llama a las operaciones en la instancia de Adapter. A su vez el adapter llama a las operaciones de Adaptee para que se ocupe del pedido.

15 Código class Shape { public: Shape(); virtual void BoundingBox( Point& bottomLeft, Point& topRight ) const; virtual Manipulator* CreateManipulator() const; };

16 Código class TextView { public: TextView(); void GetOrigin(Coord& x, Coord& y) const; void GetExtent(Coord& width, Coord& height ) const; virtual bool IsEmpty() const; };

17 Código class TextShape : public Shape, private TextView { public: TextShape(); virtual void BoundingBox( Point& bottomLeft, Point& topRight ) const; virtual bool IsEmpty() const; virtual Manipulator* CreateManipulator() const; };

18 Código void TextShape::BoundingBox ( Point& bottomLeft, Point& topRight) const { Coord bottom, left, width, height; GetOrigin(bottom, left); GetExtent(width, height); bottomLeft = Point(bottom, left); topRight = Point(bottom + height, left + width); } bool TextShape::IsEmpty () const { return TextView::IsEmpty(); }

19 Patrones Relacionados Bridge Decorator Proxy


Descargar ppt "Geykel Raul Moreno Ceballos Sherpa Chairman & Chief Software Architect Adapter (Wrapper) Structural Pattern (Patrón Estructural)"

Presentaciones similares


Anuncios Google