You are on page 1of 15

Patrones y Antipatrones

Eva M Castro

Motivacio n
El diseno orientado a objetos es un arte ma s que una ciencia.
Habilidad, talento. Experiencia. Creatividad, imaginaci o n.

Muy poca experiencia en estos dise nos (10-20 anos).

Arquitectura
Christopher Alexander:
El mismo enfoque de leyes determina la estructura de una ciudad, un edificio o de una habitaci o n.

Diferencias con la idea original:


Los edificios se llevan haciendo desde hace miles de a nos. Alexander proporciona un orden en el uso de patrones. Patrones para construir edificios completos. Enfa sis en los problemas, no en las soluciones.

Patro n
A solution to a problem in a context'
Solucio n a un problema en un contexto particular. Recurrente. Ensena, permite adaptarlo a una variante particular del problema. Tiene un nombre.
Reutilizacio n de disenos y arquitecturas que han tenido e xito. Establece un nivel m a s alto de programaci o n.

Elementos de un Patro n
Nombre: vocabulario de diseno. Problema: cuando aplicar un patro n. Solucio n: descripcio n abstracta del diseno. Consecuencias: costes y beneficios.

Los patrones resuelven problemas de diseno


Encontrar los objetos adecuados (clases que no forman parte
del mundo real).

Granularidad del los objetos. Definicio n de interfaces (operaciones que realiza un objeto).
INTERFAZ != IMPLEMENTACIO N (Dynamic binding)

Implementacio n de un objeto.
Creador Instancia

Clase vs herencia de interfaz (tipo).


Una clase puede ser de diferentes tipos (VHS es un objeto y es un video). Diferentes clases pueden ser del mismo tipo (VHS y beta, tipo video)

Programaci oon Programaci n de de interfaces, interfaces, no no implementaciones. implementaciones.

Los patrones resuelven problemas de diseno


Reutilizacio n:
Caja blanca: por herencia (de forma est a tica).
Utilizar clases abstractas.

Caja negra: por composici o n (de forma din a mica).

Favorecer oon Favorecer composici composici n frente frente herencia herencia


Delegar responsabilidad:
Ventana Area( )

rectangulo

Rectangulo Area( ) Ancho Alto

Disenando
Aplicacio n
Encapsular y aislar partes:
Reutilizacio n de co digo. Mantenimiento.

Toolkit
Conjunto de clases de prop o sito general que permiten la reutilizacio n (librer a nivel de abstracci o n menor) Evitan recodificacio n: listas, diccionarios...etc

Framework
Conjunto de clases que permiten realizar dise nos con un propo sito espec fico. Establecen una forma de trabajo, la arquitectura.

El libro de GoF (The Gang of Four):


Erich Gamma, Richard Helm, Raphl Jonhson y John Vlissides

TIPOS DE PATRONES:
Segun propo sito:
De creacio n (inicializacio n y configuracio n de objetos) Estructurales (desacoplan interfaz e implementacio n) De comportamiento (algoritmos, responsabilidades) Segun a mbito: De clases (herencia: relaciones est a ticas entre clases) De objetos (delegar en otro objeto: relaciones din a micas
entre objetos)

De Clase
De Creacio n
Factory method

De Objeto
Abstract factory, builder, prototype, singleton Adapter, bridge, composite, decorator, facade, flyweight, proxy Chain of responsability, command, iterator, interpreter, memento, observer, mediator, state, estrategy, visitor

Estructural

Interpreter, De comportamiento template method

Design Patterns: Elements of Reusable Object-Oriented Software The Gand of Four (GoF)

De creacio n
Abstract factory
Factor a para construir familias de objetos.

Builder
Separar construccio n de representacio n.

Factory method
Las subclases determinan la clase a instanciar.

Prototype
Clonar ejemplares copiando de un prototipo.

Singleton
So lo hay un objeto de esa clase.

Abstract factory

Builder

Singleton
class class singleton_t singleton_t {{ public: public: static static singleton_t singleton_t *instance(void); *instance(void); void doSomething(int); void doSomething(int); protected: protected: singleton_t(); singleton_t(); private: private: static static singleton_t singleton_t *sInstance; *sInstance;

}; };

Adapter Bridge

Estructural

Convierte una interfaz en otra deseada (Wrapper). Desacoplar una abstracci o n de su implementaci o n.

Composite
Igual tratamiento a objetos individuales y a grupos.

Decorator
Extensio n de un objeto, transparentemente.

Facade
Simplifica la interfaz para un subsistema.

Flyweight
Compartir objetos de granularidad fina eficientemente.

Proxy
Un objeto aproxima a otro.

De comportamiento
Chain of responsability
Permitir que m a s de un objeto sea capaz de atender una petici o n.

Command
Encapsula una peticio n como un objeto.

Interpreter
Inte rprete de lenguaje para una gram a tica sencilla.

Iterator
Acceso secuencial a elementos de una agregaci o n.

Mediator
Coordina las relaciones entre sus asociados.

Memento
Captura el estado de un objeto y lo restaura posteriormente.

De comportamiento
Observer
Notificaciones de cambios de estado en un objeto.

State
Objeto cuyo comportamiento depende de un estado.

Strategy
Seleccio n de un algoritmo.

Template method
Algoritmo con varios pasos suministrados por una clase derivada.

Visitor
Operaciones aplicadas a elementos de una estructura de objetos heterog e nea.

Antipatro n
Antipatro n <-> Refactored solution
Antipatro n: mala solucio n pero atractiva para un problema. Refactored solution: invierte los efectos del antipatro n.

Clasificacio n de antipatrones:
De desarrollo software (programadores). De arquitectura software (estructura del sistema). De gestio n de proyectos software (gente de
todos los roles del software).

1. Antipatrones de desarrollo
The Blob:
Una clase que lo hace todo, el resto de las clases s o lo contienen datos. Las responsabilidades deber an distribuirse uniformemente.
HojaDeDibujo NuevoDibujo EditaFigura ImprimeDibujo GiraFigura GuardaDibujo CopiaFigura CambiaCoordsFig MueveFigura ... TamanoDibujo ColorDeFondo ...

Figura TipoFigura Figura Tipo Coordenadas Tipo Coordenadas Relleno Coordenadas Relleno Relleno Borde Borde ......Borde
...

1. Antipatrones de desarrollo
The Blob:
Una clase que lo hace todo, el resto de las clases s o lo contienen datos. Las responsabilidades deber an distribuirse uniformemente.
HojaDeDibujo NuevoDibujo EditaFigura ImprimeDibujo GiraFigura GuardaDibujo CopiaFigura CambiaCoordsFig MueveFigura ... TamanoDibujo ColorDeFondo ...

Figura TipoFigura Figura Tipo Coordenadas Tipo Coordenadas Relleno Coordenadas Relleno Borde Relleno Borde ......Borde
...

10

1. Antipatrones de desarrollo
Lava Flow:
Co digo muerto y escasa informaci o n de dise no no permiten realizar cambios. Alguien escribi o esa parte del c o digo pero se fue el mes pasado y no dej o documentacio n. Cuando hab a que cambiar algo, siempre lo hac a e l

Functional Descomposition:
Co digo no OOD implementado en un OOPL. Necesaria reingenier a.

Poltergeists:
Clases y asociaciones que no hacen nada, s o lo anaden sobrecarga y complejidad innecesaria. Afecta al rendimiento del sistema.

1. Antipatrones de desarrollo
Golden hammer
El mismo concepto se aplica de forma obsesiva para cualquier
problema. Es necesario proporcionar formaci o n para aplicar nuevas soluciones, tiene riesgos.

Spagheti code:
Software muy a medida (ad-hoc) es dif cil de extender y optimizar. Resultado de la inexperiencia y de los desarrollos r a pidos.

Cut & paste programming:


Mismo co digo repetido en varios sitios, dif cil de modificar y mantener. Reutilizacio n como caja negra.

11

1. Mini-Antipatrones de desarrollo
Ambiguos Viewpoint Boat Anchor
Se compra tecnolog a muy costosa, no se usa.

Continuous Obsolescence
La tecnolog a cambia muy ra pidamente, versiones incompatibles, los programadores no pueden estar al d a. Interfaces estables.

Dead End
Actualizar un componente reusable aunque nadie lo utilice puede ser complicado.

Input Kludge Mushroom Management


Los desarrolladores nunca hablan con el cliente final.

2. Antipatrones de arquitectura
Stovepipe enterprise:
aislamiento en la empresa, no se conocen los desarrollo paralelos.

Stovepipe system:
aislamiento entre sistemas, no pueden operar.

Vendor Lock-In:
Arquitectura dependiente de un fabricante, los productos de diferentes fabricantes no suelen ser compatibles. Capa para aislar esa dependencia.

Architecture by implication:
No existe documentacio n de la arquitectura del sistema.

12

2. Antipatrones de arquitectura
Design by committee:
Complejo, mucha documentaci o n, proceso de dise no lento... Un camello es un caballo dise nado por un comite .

Reinvent the wheel.


Los programadores tienen poco conocimiento del c o digo de otros. Inventan lo que otros ya tienen en vez de aprovecharlo.

2. Mini-Antipatrones de arquitectura
Auto-Generated Stovepipe:
Migrar a un sistema distribuido.

Cover Your Assets The Grand Old Duke of York


4 de los 5 programadores no utilizan la abstracci o n.

Intellectual Violence
Intimidacio n por referencias oscuras.

Jumble
Interfaces dif ciles de usar (horizontal-vertical)

Swiss Army Knife (Navaja suiza)


Interfaz excesivamente compleja.

Wolf Ticket

13

3. Antipatrones de gestio n
Analysis paralysis:
Ana lisis tan completo que nunca termina, el proyecto muere en la fase de an a lisis. El proceso de desarrollo deber a ser incremental e iterativo.

Death by planning:
Excesiva preplanificaci o n. Los procesos de planificaci o n deber an ser incrementales e iterativos.

3. Antipatrones de gestio n
Corncob:
Personas dif ciles obstruyen y desv an en proceso de desarrollo.

Irrational management:
La falta de decisi o n puede generar decisiones de facto y desarrollos de emergencia.

Project mismanagement.
So lo apagando fuegos, no se cuida el dise no, so lo implementaci o n

14

3. Mini-Antipatrones de gestio n
Blowhard Jamboree Email is Dangerous
Email es un medio de comunicaci o n vola til.

Fear of Success
Miedo al fin del proyecto. Fijar el fin es dif cil.

The Feud Smoke and Mirrors Throw It Over The Wall


Provisio n de documentaci o n a la ligera.

Viewgraph Engineering
Somos capaces de venderlo pero y de hacerlo?

Warm Bodies

http://sern.ucalgary.ca/ ~cmcphee/SENG693/Antipatterns.html

15

You might also like