Vous êtes sur la page 1sur 24

1

Departamento de Departamento de
Lenguajes y Sistemas Inform Lenguajes y Sistemas Inform ticos ticos
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
2
Qu 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?
3
Qu 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
4
Qu es un PD
Orgenes de los PP.DD
Christopher Alexander
(Viena, 1936)
1977
1979
Qu es un PD
Orgenes de los PP.DD
Kent Beck
Ward
Cunnighan
1. Window per Task
2. Few Panes
3. Standard Panes
4. Nouns and Verbs
5. Short Menus
OOPSLA 87
5
Qu es un PD
Orgenes 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++)
Ralph
Johnson
John
Vlissides
Richard
Helm
1991. Andersen organiza un taller donde Gamma coincide con:
Qu es un PD
Orgenes 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)
6
Qu es un PD
Orgenes 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
7
De manera general
Qu es un PD
Definiciones
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 PD
Definiciones
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 PD
Definiciones
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 PD
Definiciones
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
Clasificacin
Plantilla 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
Clasificacin
Catlogo de la GoF
Clasificacin
Relaciones entre patrones
11
Clasificacin
Catlogo 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
Fachada
Fachada
Facade
Motivacin
Estructurar un entorno de programacin
Compilador
Compilador
Clases del
subsistema de
compilacin
Clases del
subsistema de
compilacin
Editor
Editor
Depurador
Depurador
Linkador
Linkador
Token
Token
AnaLex
AnaLex
AnaSin
AnaSin
ASA
ASA
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) Estructura
Clases del
subsistema
Clases del
subsistema
B
B
A
A
C
C
D
D
Fachada
Fachada
E
E
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 aruiz@us.es
Visite la web de la asignatura www.lsi.us.es

Vous aimerez peut-être aussi