45
Departamento de Departamento de Lenguajes y Sistemas Inform Lenguajes y Sistemas Inform á á ticos ticos escuela técnica superior de ingeniería informática Introducción a los Patrones de Diseño Ingeniería del Software II

Patrones de Diseño (Introducción)

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

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

El Camino

♦ Qué es un Patrón de Diseño (PD)♦ Qué no es un PD

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

♦ 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 PD

♦ Orígenes de los PP.DD

Definiciones

♦ Clasificación

♦ Ejemplo: PD Singleton

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

Qué es un PD

♦ Orígenes de los PP.DD

♦ Definiciones

Clasificación

♦ Ejemplo: PD Singleton

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ón Relaciones entre patrones

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

Qué es un PD

♦ Orígenes de los PP.DD

♦ Definiciones

♦ Clasificación

Ejemplo: PD Singleton

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.

El Camino

♦ Qué es un Patrón de Diseño (PD)Qué no es un PD

El camino

Bibliotecas

♦ Frameworks

♦ Idioms

♦ Antipatrones

♦ Refactorizaciones

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?

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

♦ 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?

El principio de Hollywood

El principio de Hollywood

Main() {i1 = new I1();i2 = new I2();i1 = i2.m(i1.g());

}

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

El camino

♦ Bibliotecas

♦ Frameworks

Idioms

♦ Antipatrones

♦ Refactorizaciones

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

El camino

♦ Bibliotecas

♦ Frameworks

♦ Idioms

Antipatrones

♦ Refactorizaciones

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

♦ ….

El camino

♦ Bibliotecas

♦ Frameworks

♦ Idioms

♦ Antipatrones

Refactorizaciones

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