1Departamento deDepartamento de
Lenguajes y Sistemas InformLenguajes y Sistemas Informticosticos
escuela tcnica superior
de ingeniera informtica
Introduccin a los Patrones de Diseo
Ingeniera del Software II
El Camino
Qu es un Patrn de Diseo (PD)
Qu no es un PD
2Qu es un Patrn de Diseo
Qu es el diseo?Qu es un patrn? Qu es un patrn de diseo?
El diseo es una actividad
El cmo frente al qu
Hacerlo correcto frente a hacer lo correcto
Asignar responsabilidades a las clases
Es una actividad difcil?
Debe serlo pues est bien remunerada
Un martillo no te hace un buen arquitecto. Conocer un lenguaje OO no te hace un buen diseador (aunque es imprescindible)
Los requisitos no funcionales son conflictivos
Qu es un Patrn de Diseo
Por lo tanto el diseador debe
Encontrar una solucin que consiga el equilibrio ptimo entre las propiedades no funcionales
Si damos el mismo documento de requisitos a 10 diseadores, obtendremos 10 diseos diferentes
Qu diferencia hay entre los diseadores expertos y los novatos?
Recetas para los problemas habituales. No estn reinventando la rueda continuamente
Utilizan recetas exitosas
Cmo se describen estas recetas?
3Qu es un Patrn de Diseo
Orgenes de los PP.DD
Definiciones
Clasificacin
Ejemplo: PD Singleton
Qu es un Patrn de Diseo
Orgenes de los PP.DD
Definiciones
Clasificacin
Ejemplo: PD Singleton
4Qu es un PDOrgenes de los PP.DD
Christopher Alexander (Viena, 1936)
1977
1979
Qu es un PDOrgenes de los PP.DD
Kent BeckWardCunnighan
1. Window per Task
2. Few Panes
3. Standard Panes
4. Nouns and Verbs
5. Short Menus
OOPSLA 87
5Qu es un PDOrgenes de los PP.DD
1990. Erich Gamma asiste a una charla de Bruce Andersen en un taller del OOPSLA, titulada Architecture Handbook. Esta realizando su tesis doctoral y necesita desarrollar un Framework C++ para aplicaciones grficas multiplataforma (ET++)
RalphJohnson
JohnVlissides
Richard Helm
1991. Andersen organiza un taller donde Gamma coincide con:
Qu es un PDOrgenes de los PP.DD
1993. Beck y Booch sufragan un retiro en las montaas de colorado. Nace el HillSide
1994. Hillside organiza la primera edicin del PLOP
(Patterns Languages of Program Design). La banda
de los cuatro venden ms de 750 ejemplares de su
libro (10 veces ms que cualquier libro hasta
entonces)
6Qu es un PDOrgenes de los PP.DD
Lecciones aprendidas
Los PP.DD han surgido tomando ideas de otras disciplinas (la arquitectura las toma a su vez de la Biologa)
Los PP.DD han tenido su origen en la Academia y no en la industria (es de los pocos ejemplos)
Las tesis doctorales sirven para algo
El mundo anglosajn suele hacer un uso intensivo de los grupos de presin en todos los mbitos
Orgenes de los PP.DD
Definiciones
Clasificacin
Ejemplo: PD Singleton
Qu es un PD
7De manera general
Qu es un PDDefiniciones
Patrn de diseo: Una solucin
general a un problema general
que puede adaptarse a un
problema concreto
http://www.textile-creation-club.com/esp/patrones.htm
Patrn: Modelo que sirve de
muestra para sacar otra cosa
igual (RAE)
En Arquitectura
Qu es un PDDefiniciones
Cada patrn describe un problema que ocurre
una y otra vez en nuestro entorno. Tambin
describe el ncleo de la solucin al problema, de
forma que puede utilizarse un milln de veces
sin hacer dos veces lo mismo
Tcnica de descripcin
Par problema-solucin
Recurrente
Slo el ncleo, no es una solucin completa
Reutilizable
8 En Ingeniera del Software (Gamma95, pg. 360)
Qu es un PDDefiniciones
A design pattern systematically names, motivates,
and explains a general design that addresses a
recurring design problem in OO systems.
It describes the problem, the solution, when to
apply the solution, and its consequences. It also
gives implementation hints and examples.
The solution is a general arrangement of object and
classes that solve the problem. The solution is
customized and implemented to solve the problem
in a particular context.
En Ingeniera del Software (Larman, pag. 204)
Existe consenso en:
Par (problema, solucin)
Reutilizar conocimiento vs reutilizar software
Problemas recurrentes (Cundo se considera recurrente?)
Qu es un PDDefiniciones
Un patrn es un par problema/solucin con nombre
que se puede aplicar en nuevos contextos con
consejos acerca de cmo aplicarlo en nuevas
situaciones y discusiones sobre sus compromisos
9 Orgenes de los PP.DD
Definiciones
Clasificacin
Ejemplo: PD Singleton
Qu es un PD
ClasificacinPlantilla de descripcin de la GoF
1. Nombre y clasificacin: expresa sucintamente la esencia del patrn
2. Intencin: frase corta que responde a qu hace y qu resuelve
3. Tambin conocido como: otros nombres conocidos para el PD
4. Motivacin: un escenario que ilustra como el PD resuelve un problema concreto
5. Aplicabilidad: otras situaciones en las que resulta aplicable el PD
6. Estructura: diagramas de clases
7. Participantes: responsabilidad de cada clase participante
8. Colaboraciones: diagrama de colaboracin y/o de secuencias
9. Consecuencias: ventajas e inconvenientes
10.Implementacin: dificultades, tcnicas y trucos a tener en cuenta al aplicar el PD
11.Cdigo de ejemplo: ejemplo de implementacin y de uso del PD
12.Usos conocidos: ejemplos de uso en sistemas reales
13.Patrones relacionados: diferencias con los patrones ms relacionados
10
Cadena de Responsabilidad, Comando,
Iterador, Mediador, Memento,
Observador, Estado, Estrategia, Visitante,
Mtodo Plantilla
De Comportamiento
Adaptador, Puente, Compuesto, Decorador,
Fachada, Peso Mosca, Apoderado
Estructural
Fbrica Abstracta, Mtodo Fbrica,
Constructor, Prototipo, Singular
Creacional
ClasificacinCatlogo de la GoF
Clasificacin Relaciones entre patrones
11
ClasificacinCatlogo de Grand
Parte de la de Gamma y la extiende con 9 categoras ms:
Fundamentales
Particionamiento
Concurrencia
GRASP
GUI
Organizacin del cdigo
Optimizacin del cdigo
Robustez
Prueba
Orgenes de los PP.DD
Definiciones
Clasificacin
Ejemplo: PD Singleton
Qu es un PD
12
Facade
1. Nombre/Clasificacin: Facade (Fachada). Estructural.
2. Intencin: Proporcionar una interfaz unificada para un conjunto de interfaces en un subsistema, hacindolo ms fcil de usar
3. Motivacin: Reducir la complejidad y minimizar dependencias
clases clientes
clases del subsistema
FachadaFachada
Facade
Motivacin
Estructurar un entorno de programacin
CompiladorCompilador
Clases del
subsistema de
compilacin
Clases del
subsistema de
compilacin
EditorEditor
DepuradorDepurador
LinkadorLinkador
TokenToken
AnaLexAnaLex
AnaSinAnaSin
ASAASA TabSim
TabSim
Compilar()Compilar()
13
Facade
4) Aplicabilidad:
Se quiera proporcionar una interfaz sencilla para un subsistema complejo
Se quiera desacoplar un subsistema de sus clientes y de otros subsistemas, hacindolo mas independiente y portable
Se quiera dividir los sistemas en niveles: las fachadas seran el punto de entrada a cada nivel
5) EstructuraClases del
subsistema
Clases del
subsistema
BB
AA
CC
DD
FachadaFachada
EE
Facade
6) Participantes
Fachada: delegar las peticiones de los clientes en los objetos del subsistema
Clases del subsistema: implementar la funcionalidad del subsistema
7) Colaboraciones
Los clientes se comunican con el subsistema a travs de la fachada, que reenva las peticiones a los objetos del subsistema apropiados y puede realizar tambin algn trabajo de traduccin
Los clientes que usan la fachada no necesitan acceder directamente a los objetos del sistema
14
Facade
8. Ejemplo: Fachada para el acceso a BBDD va JDBC
Para consultar una base de datos es necesario colaborar con objetos de al menos cinco clases diferentes
1. Connection. Conexin a la BBDD
2. DatabaseMetadata. Acceso a nombres de tablas y campos
3. Statement. Crea la sentencia SQL
4. ResultSet. Recuperar la informacin en crudo
5. ResultSetMetaData. Accede a los campos del ResultSet
Es ms que evidente que se puede simplificar la colaboracin
Facade
9) Consecuencias
Oculta a los clientes de la complejidad del subsistema y lo hace ms fcil de usar
Favorece un acoplamiento dbil entre el subsistema y sus clientes, consiguiendo que los cambios de las clases del sistema sean transparentes a los clientes
Facilita la divisin en capas y reduce dependencias de compilacin
No se impide el acceso a las clases del sistema
15
Facade
10) Implementacin
Se puede reducir an ms el acoplamiento haciendo que la fachada sea una clase abstracta, de forma que se pueda escoger entre distintas implementaciones del subsistema
Java y las ltimas versiones de C++ facilitan la definicin de clases privadas a un subsistema.
11) Patrones relacionados
Las fachadas suelen ser Singletons
Indireccin (GRASP)
Controlador (GRASP). Los controladores suelen actuar como puntos de entrada (fachadas) de la capa lgica
El Camino
Qu es un Patrn de Diseo (PD)
Qu no es un PD
16
El camino
Bibliotecas
Frameworks
Idioms
Antipatrones
Refactorizaciones
Bibliotecas (Toolkits)
Tambin conocidas como libreras y Toolkits
Conjunto de clases diseado para ser reutilizados: TADs, manejo de perifricos, grficos, gestin de documentos XML, Pueden verse como el equivalente en OO de las bibliotecas de subrutinas
Influencia baja/local en el diseo de la aplicacin cliente
Una cuestin clave de su diseo reside en conseguir facilidad de uso para el mximo nmero de escenarios sin complicar la interfaz ni reducir el rendimiento
Bibliotecas vs PP.DD
Son comparables? Qu contienen?
Cul es su tamao medio?
17
El Camino
Bibliotecas
Frameworks
Idioms
Antipatrones
Refactorizaciones
En el origen de los tiempos
Un framework era un entorno de desarrollo (IDE)
Componentes habituales:
Editor de textos
Ayuda integrada
Compilador
Biblioteca de controles visuales
Biblioteca de controles datos
Constituan un marco de trabajo para el desarrollo de aplicaciones
Visual Basic populariz el concepto en la industria
18
Qu es un framework hoy
Conjunto de clases parcialmente funcional (no es una aplicacin) para un dominio de aplicacin
Les falta aquello que es propio de la aplicacin
Ejemplos: AWT, Swing, Struts, Junit, Compact Framework, James (genuinamente andaluz),
Gran influencia en el diseo de la aplicacin cliente
Frameworks vs PP.DD
Son comparables?
Qu contienen?
Cul es su tamao medio?
El principio de Hollywood
19
El principio de Hollywood
Main() {
i1 = new I1();
i2 = new I2();
i1 = i2.m(i1.g());
}
Ventajas e inconvenientes
Reutilizacin de diseo y cdigo
Experiencia del diseador del framework
Costes de produccin reducidos
Es difcil encontrar el framework apropiado
Es difcil usar ms de un framework al mismo tiempo
Son difciles de construir y de aprender a usar
20
El camino
Bibliotecas
Frameworks
Idioms
Antipatrones
Refactorizaciones
Idioms
Una forma caracterstica de utilizar un LP [Fiadeiro]
Patrn de bajo nivel especfico de un LP. Describen soluciones a problemas de implementacin de un determinado LP [Buschmann]
gestin de memoria en C++
Idiom K-R: while (*dest++=*src++)
Para algunos, el Singleton no es un patrn de diseo
Una coleccin de idioms conforman un estilo
Las diferencias entre PP.DD e idioms son difusas
Algunos PP.DD de hoy sern idioms maana
Iterator, singleton [Gamma]
interface [Grand]
Los PP.DD son casi independientes del L.P
21
El camino
Bibliotecas
Frameworks
Idioms
Antipatrones
Refactorizaciones
Antipatrones
Se aprende de los errores ms que de los aciertos
Recetas que no deben emplearse
Intentan reutilizar conocimiento de modo similar a los PP.DD
Ejemplos
The blob
Poltergeists
Cut and paste
Spaguetti code
.
http://www.antipatterns.com/
22
El camino
Bibliotecas
Frameworks
Idioms
Antipatrones
Refactorizaciones
Refactorizaciones
M. Fowler las ha popularizado
No siempre se consigue un diseo adecuado qu hacer en tales situaciones?
Nada. En ocasiones es lo ms rentable
Refactorizar en las sucesivas operaciones de mantenimiento
La refactorizacin mantiene invariable la funcionalidad
Estn organizadas en catlogos
Muchas de ellas estn muy relacionadas con PP.DD
Pull-up. Muy relacionada con el PD Template Method
23
Bibliografa
Se recomienda revisar los siguientes enlaces:
WIKIPEDIA (design patterns, antipatterns, framework, idioms)
Historia de los patrones (http://c2.com/cgi-bin/wiki?HistoryOfPatterns)
Refactorizacin (http://c2.com/cgi-bin/wiki?HistoryOfPatterns)
Cuestiones
Resolver los test de exmenes de convocatorias anteriores
24
Cuestiones
!Gracias!
Podemos mejorar esta leccin?
Mndanos un email a [email protected]
Visite la web de la asignatura www.lsi.us.es