• No se han encontrado resultados

Tema 7: Patrones de diseño. Ingeniería del Software de Gestión II Grupo de Ingeniería del Software

N/A
N/A
Protected

Academic year: 2021

Share "Tema 7: Patrones de diseño. Ingeniería del Software de Gestión II Grupo de Ingeniería del Software"

Copied!
33
0
0

Texto completo

(1)

Ingeniería del Software de

Gestión II

Grupo de Ingeniería del Software

Tema 7:

(2)

Índice

♦ Introducción

♦ Patrones de diseño de uso común

♦ Bibliografía

(3)

Índice

♦ Introducción

♦ Patrones de diseño de uso común

♦ Bibliografía

(4)

Dónde estamos

♦  Conocemos

♦ La diferencia entre análisis y diseño

♦ Los principios de diseño y la importancia de

estos

♦  Queremos saber

♦ Qué son los patrones de diseño y cómo nos

pueden ayudar a obtener buenos diseños

♦ De dónde surgen los patrones de diseño

♦ Algunos de los patrones de diseño más

comunes: Fábrica Simple, Fábrica Abstracta,

Singleton, Fachada, Adaptador, Decorador,

Proxy, Comando, Estrategia, Método Plantilla y

Observador

(5)

Qué es un PD

Orígenes de los PP.DD

♦ Christopher Alexander

(Viena, 1936)

(6)

Qué es un PD

Orígenes de los PP.DD

Ward Cunnighan

&

Kent Beck

1.  Window per Task 2.  Few Panes

3.  Standard Panes 4.  Nouns and Verbs 5.  Short Menus

(7)

Qué es un PD

Orí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)

John

Vlissides Richard Helm Ralph

Johnson Eric

Gamma

(8)

♦  En Ingeniería del Software (Gamma95, pág. 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. …

The solution is customized and implemented to solve the problem in a particular context.

•  Técnica de descripción

•  Par problema-solución

•  Recurrente

•  Sólo el núcleo, no es una solución completa

(9)

Patrón de diseño

♦ Nombre

♦ Problema

♦ Solución

♦ Ventajas e inconvenientes

♦ Detalles de implementación

(10)

Patrones de diseño

Creacional Fábrica Abstracta, Método Fábrica,

Constructor, Prototipo, Singleton

Estructural Adaptador, Puente, Compuesto, Decorador, Fachada, Peso Mosca, Proxy

De

Comportamiento Cadena de Responsabilidad, Comando, Iterador, Mediador, Memento,

Observador, Estado, Estrategia,

Visitante, Método Plantilla

(11)

¿Dónde encuentro todo esto?

♦  Basica (de referencia):

♦  “Design Patterns”, Gamma, Helm, Johnson, Vlissides, Addison-Wesley

♦  De apoyo:

♦  Historia de los patrones

http://c2.com/cgi-bin/wiki?HistoryOfPatterns

♦  “Head First - Design Patterns”, Ed.- O’Reilly (2004). ♦  “UML y Patrones”, Craig Larman (1999).

(12)

Ejemplo: Patrón Fachada

1. Problema

♦  Se quiera proporcionar una interfaz

sencilla para un subsistema complejo

♦  Se quiera desacoplar un subsistema

de sus clientes y de otros

subsistemas, haciéndolo mas

independiente y portable

♦  Se quiera dividir los sistemas en

niveles: las fachadas serían el punto

de entrada a cada nivel

(13)

Ejemplo: Patrón Fachada

1. Problema (Ejemplo)

♦ Compilador ♦ Clases del ♦ subsistema de ♦ compilación ♦ Editor ♦ Depurador ♦ Linkador ♦ Token ♦ AnaLex ♦ AnaSin ♦ ASA ♦ TabSim ♦ Compilar()

(14)

Ejemplo: Patrón Fachada

2. Solución

♦ Clases del ♦ subsistema ♦ B ♦ A ♦ C ♦ D ♦ Fachada ♦ E

♦  Los clientes se comunican con el subsistema a través

de la fachada, que reenvía las peticiones a los objetos del subsistema apropiados y puede realizar también algún trabajo de traducción

♦  Los clientes que usan la fachada no necesitan acceder

(15)

Ejemplo: Patrón Fachada

3. Ventajas e Inconvenientes

♦  Oculta a los clientes de la complejidad del

subsistema y lo hace más fácil de usar

♦  Favorece un acoplamiento débil entre el

subsistema y sus clientes, consiguiendo que los

cambios de las clases del sistema sean

transparentes a los clientes

♦  Facilita la división en capas y reduce

dependencias de compilación

(16)

Ejemplo: Patrón Fachada

4. Detalles de implementación

♦  Se puede reducir aún más el

acoplamiento haciendo que la fachada

sea una clase abstracta, de forma que

se pueda escoger entre distintas

implementaciones del subsistema

♦  Usando la visibilidad de paquete de Java

puede ocultar el acceso a clases de un

subsistema.

(17)

Índice

♦ Introducción

♦ Patrones de diseño de uso común

♦ Bibliografía

(18)

Clasificación

Creacional Fábrica Abstracta, Método Fábrica,

Constructor, Prototipo, Singleton

Estructural Adaptador, Puente, Compuesto,

Decorador, Fachada, Peso Mosca, Proxy

De

Comportamiento Cadena de Responsabilidad, Comando, Iterador, Mediador, Memento, Observador, Estado, Estrategia,

(19)

La Fábrica Simple

♦  ¡OJO! Es una fábrica abstracta con un solo

producto. NO es un PD.

♦  La Fábrica Simple sirve para encapsular el código

de creación de objetos en una clase.

FormaPreguntarFactory create(…): IFormaPreguntar ... IFormaPreguntar p; p = factory.create(); ... PreguntaAzar crea llama IFormaPreguntar p = null; if (…) p = new PreguntaAzar(); else p = new PreguntaTodas(); return p; <<interface>> IFormaPreguntar PreguntaTodas

A lo que crea una fábrica se les denomina productos

(20)

El Patron Fábrica Abstracta

♦  El PD Fábrica Abstracta proporciona una interfaz para crear familias de objetos relacionados o dependientes sin necesidad de especificar sus clases concretas

Client AbstractFactory createProductA() createProductB() ConcreteFactory1 createProductA() createProductB()

Cada fábrica concreta crea el conjunto entero de productos.

La AbstractFactory define la interfaz de las fábricas concretas, que consiste en un conjunto de métodos para crear productos. ConcreteFactory2 createProductA() createProductB() AbstractProductA ProductA1 ProductA2 AbstractProductB ProductB1 ProductB2

Las fábricas concretas implementan las familias de producto. Para crear un producto, el cliente usa una de estas fábricas en lugar de instanciarlo directamente

(21)

El Patrón Singleton

♦  El PD Singleton garantiza que una clase sólo tenga una instancia y proporciona un punto de acceso global a ella.

PrinterManager

- instance: PrinterManager = null - PrinterManager()

+ getInstance(): PrinterManager

+ print(Document d) if (instance == null) instance = new PrinterManager(); return instance

PrinterManager es un singleton que maneja la cola de impresión para una impresora

...

PrinterManager p = PrinterManager.getInstance(); p.print(d);

Quien quiera usar el

PrinterManager lo hará con este código… PrinterManager (Clase) instance (objeto de tipo PrinterManager)

El único objeto de tipo PrinterManager está en el atributo instance de la clase PrinterManager

El “truco” es poner el constructor privado. Así se evita que otras clases puedan crear instancias de

(22)

Clasificación

Creacional Fábrica Abstracta, Método Fábrica, Constructor, Prototipo, Singleton

Estructural Adaptador, Puente, Compuesto, Decorador, Fachada, Peso Mosca, Proxy

De

Comportamiento Cadena de Responsabilidad, Comando, Iterador, Mediador, Memento, Observador, Estado, Estrategia,

(23)

El Patrón Adaptador

♦  El PD Adaptador convierte la interfaz de una clase en otra interfaz que espera el cliente. El adaptador permite que clases con interfaces incompatibles puedan funcionar

juntas. <<interface>>

ILogin

login(name,pass): Boolean

HotmailLoginAdapter

login(name, pass): Boolean

HotmailLogin

authenticate(name, pass): Boolean

Client

adaptee

(24)

FileInputStream

El Patrón Decorador

♦  El PD Decorador añade responsabilidades adicionales a un objeto dinámicamente. Los decoradores proporcionan una alternativa flexible a hacer subclases para extender la funcionalidad. read() read() Inflater Input Stream read() InputStream read() Decorator read() CipherInputStream read() InflaterInputStream read() FileInputStream read()

Los decoradores tienen el mismo supertipo que los objetos que decoran Añade su propio

comportamiento antes o después de delegar en el objeto que decora

Un objeto se puede decorar con varios decoradores

Imagen basada en el libro Head First Design Patterns, O’Reilly

Cipher Input Stream

(25)

El Patrón Fachada

♦  El PD Fachada proporciona una interfaz unificada a un conjunto de interfaces de un subsistema. La fachada define una interfaz de alto nivel que hace al subsistema más fácil de usar.

Compilador

Clases del subsistema de compilación

Editor Linkador Depurador

Token AnaLex

AnaSin

ASA TabSim

(26)

El Patrón Proxy

♦  El PD Proxy proporciona un sustituto a otro objeto para controlar su acceso. <<interface>> Image paintImage(Graph ics g) ImageFile paintImage(Graphics g) ImageProxy paintImage(Graphics g) realImage Una imagen (ImageFile) Un proxy de la imagen (ImageProxy) Un objeto que muestra una imagen

Es el objeto que carga la imagen realmente Actúa de proxy para

mostrar una imagen de “Loading” mientras carga la imagen

No sabe que está usando un proxy. Para él resulta totalmente transparente

realImage.paintImage(g) image.paintImage(g)

(27)

Clasificación

Creacional Fábrica Abstracta, Método Fábrica, Constructor, Prototipo, Singleton

Estructural Adaptador, Puente, Compuesto,

Decorador, Fachada, Peso Mosca, Proxy

De

Comportamiento Cadena de Responsabilidad, Comando, Iterador, Mediador, Memento,

Observador, Estado, Estrategia,

(28)

El Patrón Estrategia

♦  El PD Estrategia define una familia de algoritmos, los encapsula y los hace intercambiables. Permite que el algoritmo varíe independientemente del cliente.

CasillaCentral pregunta(): Boolean Estrategias (Formas de preguntar) <<interface>> IFormaPreguntar pregunta(): Boolean PreguntaAzar pregunta(): Boolean PreguntaTodas preguntar(): Boolean PreguntaElegida preguntar(): Boolean formaPreguntar

(29)

El Patrón Método Plantilla

♦  El PD Método Plantilla define el esqueleto de un

algoritmo en un método, dejando algunos pasos a sus subclases, es decir, deja que las subclases redefinan ciertos pasos del algoritmo sin cambiar su estructura

Bebida preparar() hervir() ponerEnVaso() echar() condimentar() Té echar() condimentar() Café echar()

public final void preparar() { hervir(); echar(); ponerEnVaso(); condimentar(); } Método plantilla Método primitivo (abstracto) Método gancho

(se da una implementación por defecto que se puede refinar opcionalmente)

Métodos concretos (finales)

(30)

Observers

El Patrón Observador

♦  El PD Observador define una dependencia uno-a-varios entre objetos de manera que cuando un objeto cambia de estado, se notifica a todas sus dependencias y se actualizan automáticamente. <<interface>> Subject register(Observer o) remove(Observer o) notifyObservers() WeatherData register(Observer o) remove(Observer o) notifyObservers() getTemperature(): float getHumidity(): float measurementsChanged() <<interface>> Observer

update(temp: float, hum: float)

CurrentConditionsDisplay update(temp, hum) display() StatisticsDisplay update(temp, hum) display() ExternalDisplay update(temp, hum) display() observers * subject subject WeatherData (Subject) StatisticsDisplay (Observer) ExternalDisplay (Observer) CurrentConditio nsDisplay (Observer) Los observadores se registran utilizando el método register El sujeto observado avisa a los observadores cuando se ha producido algún cambio 13ºC, 72% 13ºC, 72%

(31)

Índice

♦ Introducción

♦ Patrones de diseño de uso común

♦ Bibliografía

(32)

Bibliografía

♦  Basica (de referencia):

♦  “Design Patterns”, Gamma, Helm, Johnson, Vlissides, Addison-Wesley

♦  De apoyo:

♦  “Head First - Design Patterns”, Ed.- O’Reilly (2004). ♦  “UML y Patrones”, Craig Larman (1999).

(33)

!Gracias!

♦  ¿Podemos mejorar esta presentación?

♦ Mándanos un email a

[email protected]

Referencias

Documento similar

En un estudio clínico en niños y adolescentes de 10-24 años de edad con diabetes mellitus tipo 2, 39 pacientes fueron aleatorizados a dapagliflozina 10 mg y 33 a placebo,

• Descripción de los riesgos importantes de enfermedad pulmonar intersticial/neumonitis asociados al uso de trastuzumab deruxtecán. • Descripción de los principales signos

E Clamades andaua sienpre sobre el caua- 11o de madera, y en poco tienpo fue tan lexos, que el no sabia en donde estaña; pero el tomo muy gran esfuergo en si, y pensó yendo assi

[r]

SVP, EXECUTIVE CREATIVE DIRECTOR JACK MORTON

Social Media, Email Marketing, Workflows, Smart CTA’s, Video Marketing. Blog, Social Media, SEO, SEM, Mobile Marketing,

• For patients with severe asthma and who are on oral corticosteroids or for patients with severe asthma and co-morbid moderate-to-severe atopic dermatitis or adults with

Administration of darolutamide (600 mg twice daily for 5 days) prior to co-administration of a single dose of rosuvastatin (5 mg) together with food resulted in approximately