2. Patrones de Diseño
(Design Patterns)
Las primeras instancias para la reutilización de
diseños abstractos aparecieron en la documentación
y publicación de algoritmos fundamentales (Knuth.
1971)
Los patrones de diseño se derivaron de las ideas
introducidas por Christopher Alexander (Alexander et
ai, 1977), quien sugirió que existían ciertos patrones
del diseño de edificios que eran comunes e
inherentemente interesantes y efectivos
3. Un poco de historia
En 1987, Ward Cunningham y Kent Beck trabajaron con
Smaltalk y diseñaron interfaces de usuario. Decidieron,
para ello, utilizar alguna de las ideas de Alexander para
desarrollar un lenguaje pequeño de patrones para servir
de guía a los programadores.
De 1990 en adelante varios autores como Erich Gamma,
Richard Helm, Ralph Johnson y John Vlissides
(nombrados el grupo de los cuatro) realizan un catálogo
de patrones de diseño y así sucesivamente se han ido
agregando más patrones de diseño como de
organización de código, de optimización de código, etc.
4. Patrones de Diseño:
¿Para qué sirven?
Los patrones de diseño son la base para la búsqueda de
soluciones a problemas comunes en el desarrollo
de software y otros ámbitos referentes al diseño de
interacción o interfaces.
Un patrón de diseño es una solución a un problema de
diseño. Para que una solución sea considerada un patrón
debe poseer ciertas características. Una de ellas es
resuelva problemas similares de manera efectiva. Otra
característica es que debe ser reutilizable.
5. Patrones de diseño
Los patrones y los lenguajes de patrones son formas
de describir las mejores prácticas, buenos diseños y
encapsulan la experiencia de tal forma que es posible
que otras personas puedan reutilizar dicha
experiencia.
Proporciona un esquema para refinar los subsistemas
o componentes de un sistema software, o las
relaciones entre ellos.
6. Tipos de patrones
Patrones de arquitectura
organización o esquema estructural
Patrones de diseño
esquema para refinar los subsistemas o componentes
de un sistema software, o las relaciones entre ellos
Patrones de programación (idioms)
Utiliza facilidades del lenguaje de programación dado.
Patrones de análisis
conjunto de prácticas
Patrones organizacionales
estructura y prácticas de las organizaciones
7. Otros tipos de patrones menos
comunes
Patrones de programación concurrente.
Patrones de interfaz gráfica.
Patrones de organización del código.
Patrones de optimización de código.
Patrones de robustez de código.
Patrones de la fase de prueba.
8. Elementos de un patrón
Nombre
Objetivo
Contexto
Aplicabilidad
Solución
Implementación
Concecuencias
Patrones relacionados
9. Cualidades de un patrón de diseño
Encapsulación y abstracción: cada patrón encapsula un
problema bien definido y su solución en un dominio
particular.
Extensión y variabilidad: cada patrón debería ser abierto
por extensión o parametrización por otros patrones
Generalidad y composición: cada patrón, una vez aplicado,
genera un contexto resultante, el cual concuerda con el
contexto inicial de uno o más de uno de los patrones del
catálogo
Equilibrio: cada patrón debe realizar algún tipo de balance
entre sus efectos y restricciones
10. De creación Estructurales Comportamiento Concurrencia
Fábrica Abstracta Adaptador Cadena de
responsabilidad Objeto Activo
Constructor Virtual Puente Orden Obstaculizar
Método de Objeto compuesto Intérprete
fabricación Pegue
Prototipo Envoltorio Iterador Mensajes (MDP)
Instancia Única Fachada Mediador Doble candado
Peso ligero Recuerdo Eventos asincronos
Proxy Observador Suspencion
vigilada
Módulo Estado Candado
Estrategia Monitor object
Método Plantilla Reactor
Visitante Bloqueado
Lectura-Escritura
Scheduler
Manejo de Hilos
Almacenamiento
11.
12. Ventajas y Desventajas
Ventajas:
Permiten reutilizar soluciones de problemas
comunes.
Están probados y son lo suficientemente
flexibles para adaptarse.
Desventajas:
Su elevado número (falta de catalogación).
Su complejidad.
Poca definición.
13. Tipos de Patrones
Adaptador: Adapta la interfaz de una clase a la
interfaz esperada por sus clientes, favorece la
reutilización (de la clase adaptada) y permite la
colaboración con interfaces incompatibles. También
se conoce como Wrapper.
14.
15.
16. Tipos de Patrones
Decorador: Permite añadir responsabilidades
adicionales a un objeto de forma dinámica. Los
decoradores proporcionan una alternativa flexible a la
subclasificación para añadir funcionalidad.
17. Tipos de Patrones
Estado: Es un patrón de comportamiento para
objetos. Se debe usar si el comportamiento de un
objetodepende de su estado, y se ve modificado en
tiempo de ejecución. Permite que un objeto cambie
su comportamiento cuando cambia su estado interno,
tal y como si el objeto cambiase de clase.
19. Tipos de Patrones
Singular (singleton): (instancia única) está diseñado
para restringir la creación de objetos pertenecientes a
una clase o el valor de un tipo a un único objeto. Su
intención consiste en garantizar que una clase sólo
tenga una instancia y proporcionar un punto de
acceso global a ella
21. Tipos de Patrones
Iterador: Proporciona una forma de acceder
secuencialmente a los elementos de una colección sin
mostrar la representación interna de la misma.
Permite definir diversos recorridos sobre una
estructura, admitiendo el uso simultáneo de la misma
por parte de varios clientes.
23. Tipos de Patrones
Chain of Responsibility (Cadena de responsabilidad):
Permite establecer la línea que deben llevar los
mensajes para que los objetos realicen la tarea
indicada.
25. Tipos de Patrones
Composite. Combina objetos en
estructuras de árbol para
representar jerarquías de parte-
todo. Permite que los clientes
traten de manera uniforme a los
objetos individuales y a los
compuestos.
26. Tipos de Patrones
Facade. Proporciona una
interfaz unificada para
un conjunto de
interfaces de un
subsistema. Define una
interfaz de alto nivel que
hace que el subsistema
se más fácil de usar.
27. Tipos de Patrones
Prototype. Especifica los
tipos de objetos a crear por
medio de una instancia
prototípica, y crear nuevos
objetos copiando este
prototipo.
28. Tipos de Patrones
Proxy: se utiliza como
intermediario para acceder
a un objeto, permitiendo
controlar el acceso a él.
Necesitamos crear objetos
que consumen muchos
recursos, pero no queremos
instanciarlos a no ser que el
cliente lo solicite o se
cumplan otras condiciones
determinadas.
29. Tipos de Patrones
Flyweight. Usa el
compartimiento
para permitir un
gran número de
objetos de grano
fino de forma
eficiente.
30. Tipos de Patrones
Bridge. Desvincula una abstracción de su
implementación, de manera que ambas puedan variar
de forma independiente.
Abstraccion Implementacion
Operacion() OperacionImpl()
imp.OperacionImpl()
OperacionRedefinida ImplementaA ImplementaB
OperacionImpl() OperacionImpl()
31. CONCLUSIONES
La noción de un patrón como un concepto reutilizable ha sido desarrollada en
varias áreas además del diseño software, que incluye gestión de
configuraciones, diseño de interfaces de usuario y escenarios de interacciones
El uso de patrones es una forma efectiva de reutilización.
Se puede afirmar que sólo ingenieros de software experimentados que tengan
un conocimiento profundo de patrones pueden utilizarlos de forma efectiva.
Estos desarrolladores pueden reconocer situaciones genéricas en las que se
puede aplicar un patrón.
Los programadores sin experiencia, aun cuando hayan leído libros sobre
patrones, siempre encontrarán difícil decidir si pueden reutilizar un patrón o si
necesitan desarrollar una solución de propósito específico.