patrones de diseño (introducción)
TRANSCRIPT
Departamento deDepartamento deLenguajes y Sistemas InformLenguajes y Sistemas Informááticosticos
escuela técnica superiorde ingeniería informática
Introducción a los Patrones de Diseño
Ingeniería del Software II
Qué es un Patrón de Diseño
♦ ¿Qué es el diseño?¿Qué es un patrón? ¿Qué es un patrón de diseño?
♦ El diseño es una actividad♦ El cómo frente al qué
♦ Hacerlo correcto frente a hacer lo correcto
♦ Asignar responsabilidades a las clases
♦ ¿Es una actividad difícil?♦ Debe serlo pues está bien remunerada
♦ “Un martillo no te hace un buen arquitecto”. Conocer un lenguaje OO no te hace un buen diseñador (aunque es imprescindible)
♦ Los requisitos no funcionales son “conflictivos”
Qué es un Patrón de Diseño
♦ Algunas propiedades no funcionales
♦ Reutilización
♦ Facilidad de modificación
♦ Facilidad de comprensión
♦ Robustez
♦ Eficiencia
♦ Facilidad de uso
♦ ……
♦ En ocasiones es más importante el aspecto de la calidad que el aspecto funcional
♦ Las técnicas para conseguir la calidad están menos desarrolladas que las utilizadas para conseguir la funcionalidad
Qué es un Patrón de Diseño
♦ Caminos posibles durante el desarrollo de un proyecto software
Aspectos no funcionales
Aspectos funcionales
HabitualPrevisiónde
entregas
Deseable
Qué es un Patrón de Diseño
♦ Por lo tanto el diseñador debe …♦ Encontrar una solución que consiga el equilibrio
óptimo entre las propiedades no funcionales♦Si damos el mismo documento de requisitos a 10
diseñadores, obtendremos 10 diseños diferentes
♦ ¿Qué diferencia hay entre los diseñadores expertos y los novatos?♦ Recetas para los problemas habituales. No están
reinventando la rueda continuamente
♦ Utilizan recetas exitosas
♦ ¿Cómo se describen estas recetas?
Qué es un Patrón de Diseño
♦ Orígenes de los PP.DD
♦ Definiciones
♦ Clasificación
♦ Ejemplo: PD Singleton
Qué es un Patrón de Diseño
Orígenes de los PP.DD
♦ Definiciones
♦ Clasificación
♦ Ejemplo: PD Singleton
Qué es un PDOrígenes de los PP.DD
♦ Christopher Alexander (Viena, 1936)
1977
1979
Qué es un PDOrígenes 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
Qué es un PDOrígenes 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 gráficas multiplataforma (ET++)
♦1991. Andersen organiza un taller donde Gamma coincide con:
RalphJohnson
JohnVlissides
Richard Helm
Qué es un PDOrígenes de los PP.DD
♦ 1993. Beck y Booch “sufragan” un retiro en las montañas de colorado. Nace el HillSide
♦1994. Hillside organiza la primera edición del PLOP (Patterns Languages of Program Design). La banda de los cuatro venden más de 750 ejemplares de su libro (10 veces más que cualquier libro hasta entonces)
Qué es un PDOrígenes 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 Biología)
♦ 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 anglosajón suele hacer un uso intensivo de los grupos de presión en todos los ámbitos
Qué es un PDDefiniciones
♦De manera general
Patrón de diseño: Una solución general a un problema general que puede adaptarse a un problema concreto
Patrón: Modelo que sirve de muestra para sacar otra cosa igual (RAE)
http://www.textile-creation-club.com/esp/patrones.htm
Qué es un PDDefiniciones
♦ En Arquitectura
Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno. También
describe el núcleo de la solución al problema, de forma que puede utilizarse un millón de veces
sin hacer dos veces lo mismo
• Técnica de descripción• Par problema-solución• Recurrente• Sólo el núcleo, no es una solución completa• Reutilizable
Qué es un PDDefiniciones
♦ En Ingeniería del Software (Gamma95, pág. 360)
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.
Qué es un PDDefiniciones
♦ En Ingeniería del Software (Larman, pag. 204)
♦ Existe consenso en:♦ Par (problema, solución)
♦ Reutilizar conocimiento
♦ Problemas recurrentes (¿Cuándo se considera recurrente?)
Un patrón es un par problema/solución con nombre que se puede aplicar en nuevos contextos con consejos acerca de cómo aplicarlo en nuevas
situaciones y discusiones sobre sus compromisos
ClasificaciónPlantilla de descripción de la GoF
1. Nombre y clasificación: expresa sucintamente la esencia del patrón
2. Intención: frase corta que responde a qué hace y qué resuelve
3. También conocido como: otros nombres conocidos para el PD
4. Motivación: 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 colaboración y/o de secuencias
9. Consecuencias: ventajas e inconvenientes
10.Implementación: dificultades, técnicas y trucos a tener en cuenta al aplicar el PD
11.Código de ejemplo: ejemplo de implementación y de uso del PD
12.Usos conocidos: ejemplos de uso en sistemas reales
13.Patrones relacionados: diferencias con los patrones más relacionados
ClasificaciónCatálogo de la GoF
Creacional Fábrica Abstracta, Método Fábrica,
Constructor, Prototipo, Singular
Estructural Adaptador, Puente, Compuesto, Decorador,
Fachada, Peso Mosca, Apoderado
De Comportamiento
Cadena de Responsabilidad, Comando,
Iterador, Mediador, Memento,
Observador, Estado, Estrategia, Visitante,
Método Plantilla
ClasificaciónCatálogo de Grand
♦ Parte de la de Gamma y la extiende con 9 categorías más:♦ Fundamentales
♦ Particionamiento
♦ Concurrencia
♦ GRASP
♦ GUI
♦ Organización del código
♦ Optimización del código
♦ Robustez
♦ Prueba
Ejemplo de PD: Singleton
1. Nombre y clasificación: Singleton. Creacional
2. Intención: Garantizar que una clase sólo tenga una instancia y proporcionar un punto de acceso global a ella
3. También conocido como: Singular, único.
4. Motivación: Registro discrecional de las llamadas a métodos. Adicionalmente, registrar mensajes de depuración
Ejemplo de PD: Singleton
5. Aplicabilidad: Usaremos este patrón cuando:♦ Deba haber exactamente una instancia de una clase y
deba ser accesible a los clientes desde un punto de acceso conocido.♦ Acceso al archivo de configuración de una aplicación
♦ Gestor de impresión
♦ Una fábrica de objetos
6. Estructura:
-Singleton()+getInstance() : Singleton
-instance : Singleton = nullSingleton
if (instance == null)instance= new Singleton();
return instance;
Ejemplo de PD: Singleton
7. Participantes: ♦ Singleton: define una operación de clase
getInstance que permite a los clientes acceder a su instancia única y además es responsable de su creación
8. Colaboraciones: ♦ Los clientes acceden a la única instancia
solamente a través de la operación getInstance
♦ Se suelen emplear estereotipos para simplificar los diagramas de secuencia y colaboración
…Singleton s= Singleton.getInstance()s.op1();….
Ejemplo de PD: Singleton
9. Implementación:
♦ Ocultar el constructor
♦ Definir getInstance como estático
♦ Pueden ser necesarias operaciones de terminación (depende de la gestión de memoria del lenguaje)
♦ En ambientes concurrentes es necesario usar mecanismos que garanticen la atomicidad del método getInstance
♦ Si se desea garantizar la unicidad a nivel de sistema, se puede hacer uso de semáforos
10.Consecuencias:
♦ Reduce el espacio de nombres
♦ Rompe el esquema habitual de creación de objetos
Ejemplo de PD: Singleton
11.Código de ejemplo:
♦ Tracer
12.Usos conocidos:
♦ Clase java.lang.Runtime, java.lang.Math, java.util.Collections
♦ Clase Environment de MS.NET
13.Patrones relacionados:
♦ Fábrica abstracta
♦ Método Fábrica
♦ Prototipo
♦ Object Pool [Grand98]. Cuando se desea tener un número determinado de instancias. Cuando la creación de una instancia es muy costosa e interesa reutilizar la instancia.
Bibliotecas (Toolkits)
♦ También conocidas como librerías y Toolkits
♦ Conjunto de clases diseñado para ser reutilizados: TADs, manejo de periféricos, gráficos, gestión de documentos XML. Pueden verse como el equivalente en OO de las bibliotecas de subrutinas
♦ Influencia baja en el diseño de la aplicación cliente
♦ Una cuestión clave de su diseño reside en conseguir facilidad de uso para el máximo número de escenarios sin complicar la interfaz ni reducir el rendimiento
♦ Bibliotecas vs PP.DD♦ ¿Son comparables?
♦ ¿Qué contienen?
♦ ¿Cuál es su tamaño medio?
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
♦ Constituían un marco de trabajo para el desarrollo de aplicaciones
♦ Visual Basic popularizó el concepto en la industria
Qué es un framework hoy
♦ Conjunto de clases parcialmente funcional para un dominio de aplicación
♦ Sólo les falta aquello que es propio del problema
♦ Ejemplos: AWT, Swing, Struts, Junit, Compact Framework, James (genuinamente andaluz)
♦ Gran influencia baja en el diseño de la aplicación cliente
♦ Frameworks vs PP.DD♦ ¿Son comparables?
♦ ¿Qué contienen?
♦ ¿Cuál es su tamaño medio?
Ventajas e inconvenientes
♦ Reutilización de diseño y código
♦ Experiencia del diseñador del framework
♦ Costes de producción reducidos
♦ Es difícil encontrar el framework apropiado
♦ Es difícil usar más de un framework al mismo tiempo
♦ Son difíciles de construir y de aprender a usar
Idioms
♦ Una forma característica de utilizar un LP [Fiadeiro]♦ Patrón de bajo nivel específico de un LP. Describen
soluciones a problemas de implementación de un determinado LP [Buschmann]♦ gestión de memoria en C++♦ Idiom K-R: while (*dest++=*src++)♦ Para algunos, el Singleton no es un patrón de diseño
♦ Una colección de idioms conforman un estilo♦ Las diferencias entre PP.DD e idioms son difusas
♦ Algunos PP.DD de hoy serán idioms mañana♦ Iterator, singleton [Gamma]
♦ interface [Grand]
♦ Los PP.DD son casi independientes del L.P
Antipatrones
♦ Se aprende más de los errores que de los aciertos
♦ Intentan reutilizar conocimiento de modo similar a los PP.DD
♦ Capturan experiencia
♦ The blob
♦ Poltergeists
♦ Cut and paste
♦ Spaguetti code
♦ ….
Refactorizaciones
♦ M. Fowler las ha popularizado
♦ No siempre se consigue un diseño adecuado ¿qué hacer en tales situaciones?
♦ Nada. En ocasiones es lo más rentable
♦ Refactorizar en las sucesivas operaciones de mantenimiento
♦ La refactorización mantiene invariable la funcionalidad
♦ Estan organizadas en catálogos
♦ Muchas de ellas están muy relacionadas con PP.DD
♦ Pull-up. Muy relacionada con el PD Template Method
!Gracias!
♦ ¿Podemos mejorar esta lección?♦ Mándanos un email a [email protected]
♦ Visite la web de la asignatura www.lsi.us.es