patrones de diseño (recopilación)

86
Diseño con Patrones Yupanqui García, Glen Jasper 05200080 Diseño de Sistemas [Referencia: Reutilización del Software]

Upload: glen2107

Post on 12-Jun-2015

6.135 views

Category:

Documents


8 download

DESCRIPTION

Una Recopilación de los Patrones de Diseño para el curso de Diseño de Sistemas.

TRANSCRIPT

Page 1: Patrones de Diseño (Recopilación)

Diseño con Patrones

Yupanqui García, Glen Jasper

05200080

Diseño de Sistemas

[Referencia: Reutilización del Software]

Page 2: Patrones de Diseño (Recopilación)

Introducción

2

El diseño OO es difícil y el diseño de software orientado a objetos reutilizable lo es aún más.

Los diseñadores expertos no resuelven los problemas desde sus principios; reutilizan soluciones que han funcionado en el pasado. Se encuentran patrones de clases y objetos de

comunicación recurrentes en muchos sistemas orientados a objetos.

Estos patrones resuelven problemas de diseño específicos y hacen el diseño flexible y reusable.

Page 3: Patrones de Diseño (Recopilación)

Definición de un patrón

3

Alexander(arquitecto/urbanista)Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno y describe también el núcleo de la solución al problema, de forma que puede utilizarse un millón de veces sin tener que hacer dos veces lo mismo.

Page 4: Patrones de Diseño (Recopilación)

Definición de un patrón de diseño

4

[Gamma]Un patrón de diseño es una descripción de clases y objetos comunicándose entre sí adaptada para resolver un problema de diseño general en un contexto particular.

Page 5: Patrones de Diseño (Recopilación)

Introducción

5

Es un tema importante en el desarrollo de software actual: permite capturar la experiencia

Busca ayudar a la comunidad de desarrolladores de software a resolver problemas comunes, creando un cuerpo literario de base Crea un lenguaje común para comunicar ideas y

experiencia acerca de los problemas y sus soluciones El uso de patrones ayuda a obtener un software

de calidad (reutilización y extensibilidad)

Page 6: Patrones de Diseño (Recopilación)

Elementos de un patrón

6

Nombre: describe el problema de diseño. El problema: describe cuándo aplicar el

patrón. La solución: describe los elementos que

componen el diseño, sus relaciones, responsabilidades y colaboración.

Page 7: Patrones de Diseño (Recopilación)

Ventajas de los patrones de diseño

7

Son soluciones concretas: Un catálogo de patrones es un conjunto de recetas de diseño. Aunque se pueden clasificar, cada patrón es independiente del

resto. Son soluciones técnicas:

Dada una determinada situación, los patrones indican cómo resolverla mediante un D.O.O.

Existen patrones específicos para un lenguaje determinado, y otros de carácter más general.

Se aplican en situaciones muy comunes: Proceden de la experiencia. Han demostrado su utilidad para resolver problemas que

aparecen frecuentemente en el D.O.O.

Page 8: Patrones de Diseño (Recopilación)

Ventajas de los patrones de diseño

8

Son soluciones simples: Indican cómo resolver un problema particular utilizando

un pequeño número de clases relacionadas de forma determinada.

No indican cómo diseñar un sistema completo, sino sólo aspectos puntuales del mismo.

Facilitan la reutilización de las clases y del propio diseño: Los patrones favorecen la reutilización de clases ya

existentes y la programación de clases reutilizables. La propia estructura del patrón es reutilizada cada vez

que se aplica.

Page 9: Patrones de Diseño (Recopilación)

Inconvenientes

9

El uso de un patrón no se refleja claramente en el código: A partir de la implementación es difícil determinar qué patrón de diseño

se ha utilizado. No es posible hacer ingeniería inversa.

Referencias a “self”: Muchos patrones utilizan la delegación de operaciones y esto provoca el

conocido problema del ámbito local de los objetos (self). Es difícil reutilizar la implementación de un patrón:

Las clases del patrón son roles genéricos, pero en la implementación aparecen clases concretas.

Los patrones suponen cierta sobrecarga de trabajo a la hora de implementar: Se usan más clases de las estrictamente necesarias. A menudo un mensaje se resuelve mediante delegación de varios

mensajes a otros objetos.

Page 10: Patrones de Diseño (Recopilación)

Clasificación de los patrones

10

Según su ámbito: Patrones de clases . Tratan con relaciones de

herencia (estática) entre clases. Patrones de objetos . Se refieren a relaciones

de composición entre objetos, que pueden cambiar en tiempo de ejecución y son más dinámicas.

Page 11: Patrones de Diseño (Recopilación)

Clasificación de los patrones

11

Según su propósito: De creación: conciernen al proceso de creación

de objetos. De estructura: tratan la composición de clases

y/o objetos. De comportamiento: caracterizan las formas en

las que interactúan y reparten responsabilidades las distintas clases u objetos.

Page 12: Patrones de Diseño (Recopilación)

Clasificación de los patronesGoF (gang of Four) [Gamma]

12

Page 13: Patrones de Diseño (Recopilación)

Patrones de diseño fundamentales

13

Son patrones que no aparecen la tabla definida por Gamma, pero se utilizan habitualmente:

DELEGATION INTERFACE MARKER INTERFACE

Page 14: Patrones de Diseño (Recopilación)

Patrón DELEGATION

14

Utilidad:Cuando se quiere extender y reutilizar la funcionalidad de una clase SIN UTILIZAR LAHERENCIA

Ventajas: En vez de herencia múltiple Cuando una clase que hereda de otra quiere ocultar

algunos de los métodos heredados Compartir código que NO se puede heredar

Page 15: Patrones de Diseño (Recopilación)

Patrón DELEGATIONEl problema

15

Page 16: Patrones de Diseño (Recopilación)

Patrón DELEGATIONLa solución

16

Page 17: Patrones de Diseño (Recopilación)

Patrón DELEGATIONImplementación

17

Page 18: Patrones de Diseño (Recopilación)

Patrón INTERFACEUtilidad y Ventajas

18

Utilidad Definir un comportamiento independiente de

donde vaya a ser utilizado Ventajas

Desacople entre comportamiento y clase. Realización de clases “Utilities”

Page 19: Patrones de Diseño (Recopilación)

Patrón INTERFACEEl problema

19

Page 20: Patrones de Diseño (Recopilación)

Patrón INTERFACELa Solución

20

Page 21: Patrones de Diseño (Recopilación)

Patrón INTERFACEImplementación

21

Page 22: Patrones de Diseño (Recopilación)

Patrón INTERFACEEjemplo

22

Page 23: Patrones de Diseño (Recopilación)

Patrón MARKER INTERFACEUtilidad y Ventajas

23

Utilidad Sirve para indicar atributos semánticos de una clase.

Ventajas: Se puede preguntar si un objeto pertenece a una clase de

un determinado tipo o no. Habitualmente se utiliza en clases de utilidades que

tienen que determinar algo sobre objetos sin asumir que son instancias de una determinada clase o no.

Page 24: Patrones de Diseño (Recopilación)

Patrón MARKER INTERFACE

24

Page 25: Patrones de Diseño (Recopilación)

Patrón MARKER INTERFACEEjemplo

25

En Java hay clases “serializables”, “cloneables”, etc. Para ello, basta con que implementen las interfaces Serializable, Cloneable, etc.

Page 26: Patrones de Diseño (Recopilación)

Clasificación de los patronesGoF (gang of Four) [Gamma]

26

Page 27: Patrones de Diseño (Recopilación)

Patrón SINGLETON

27

Utilidad Asegurar que una clase tiene una sola instancia y

proporcionar un punto de acceso global a ella Ventajas

Es necesario cuando hay clases que tienen que gestionar de manera centralizada un recurso

Una variable global no garantiza que sólo se instancie una vez

Page 28: Patrones de Diseño (Recopilación)

Patrón SINGLETONLa solución

28

Page 29: Patrones de Diseño (Recopilación)

Patrón SINGLETONImplementación

29

Page 30: Patrones de Diseño (Recopilación)

Patrón SINGLETONInconvenientes

30

Page 31: Patrones de Diseño (Recopilación)

31

Page 32: Patrones de Diseño (Recopilación)

Patrón FACTORY METHOD

32

Utilidad Separar la clase que crea los objetos, de la

jerarquía de objetos a instanciar Ventajas

Centralización de la creación de objetos Facilita la escalabilidad del sistema El usuario se abstrae de la instancia a crear

Page 33: Patrones de Diseño (Recopilación)

Patrón FACTORY METHODEl problema

33

Page 34: Patrones de Diseño (Recopilación)

Patrón FACTORY METHODUna primera solución

34

Page 35: Patrones de Diseño (Recopilación)

Patrón FACTORY METHODLa solución final

35

Page 36: Patrones de Diseño (Recopilación)

Patrón FACTORY METHOD

36

Page 37: Patrones de Diseño (Recopilación)

Patrón FACTORY METHOD

37

Page 38: Patrones de Diseño (Recopilación)

Clasificación de los patronesGoF (gang of Four) [Gamma]

38

Page 39: Patrones de Diseño (Recopilación)

Patrón ADAPTER

39

Intención Convertir la interfaz de una clase en otra interfaz

esperada por los clientes. Permite que clases con interfaces incompatibles se

comuniquen

Ventajas Se quiere utilizar una clase ya existente y su interfaz no

se corresponde con la interfaz que se necesita Se quiere envolver código no orientado a objeto con

forma de clase

Page 40: Patrones de Diseño (Recopilación)

Patrón ADAPTEREl problema

40

Page 41: Patrones de Diseño (Recopilación)

Patrón ADAPTERLa solución

41

Page 42: Patrones de Diseño (Recopilación)

Patrón ADAPTERDiagrama de interacción

42

Page 43: Patrones de Diseño (Recopilación)

Patrón ADAPTER

43

Convierte la interfaz de una clase en otra interfaz que los clientes esperan. Permite que clases con interfaces incompatibles puedan ser utilizadas conjuntamente. La interfaz de la clase B (los métodos b1(),b2()…)

los convierte/adapta a los métodos esperados por la clase A (métodos m1(),m2(),…)

Page 44: Patrones de Diseño (Recopilación)

Patrón ADAPTEREjemplo de uso en JGL

44

Page 45: Patrones de Diseño (Recopilación)

Patrón ADAPTEREjemplo I

45

Page 46: Patrones de Diseño (Recopilación)

Patrón ADAPTEREjemplo II

46

Page 47: Patrones de Diseño (Recopilación)

Patrón COMPOSITE

47

Page 48: Patrones de Diseño (Recopilación)

Patrón COMPOSITEEl problema: La escalabilidad

48

Page 49: Patrones de Diseño (Recopilación)

Patrón COMPOSITELa solución

49

Page 50: Patrones de Diseño (Recopilación)

Patrón COMPOSITELa solución

50

Page 51: Patrones de Diseño (Recopilación)

Patrón COMPOSITEEjemplo: La jerarquía de clases de AWT

51

Sirve para diseñar clases que agrupen a objetos complejos, los cuales a su vez están formados por objetos complejos y/o simples.

La jerarquía de clases AWT se ha diseñado según el patrón COMPOSITE

Page 52: Patrones de Diseño (Recopilación)

Patrón COMPOSITEEjemplo: La jerarquía de clases de AWT

52

Las posibilidades son infinitas… Una ventana formada por 2 cajas de texto, 2 campos de texto, 3

botones, 1 panel que contenga 5 casillas de validación y una lista desplegable.

Una ventana formada por 2 etiquetas, 2 campos de texto y un botón -…

Además, añadir nuevos tipos de contenedores y de componentes no sería muy costoso (estaríamos ante una solución extensible)

Page 53: Patrones de Diseño (Recopilación)

Patrón COMPOSITEUn diseño francamente malo …

53

Se necesitarían métodos addButton, addCheckBox, addTextField, addFrame en la clase Frame (y los correspondientes a todos los que faltan)

Además el diagrama está muy incompleto, ya que un Button puede ser componente de un Panel, Dialog, …

Si se quisiera añadir un nuevo componente XXX, habría que cambiar la clase Frame y añadir el método addXXX (nada extensible)

Page 54: Patrones de Diseño (Recopilación)

Componentes principales de Swing

54

Page 55: Patrones de Diseño (Recopilación)

Patrón FACADE

55

Intención: El patrón FACADE simplifica el acceso a un conjunto de clases proporcionando una única clase que todos utilizan para comunicarse con dicho conjunto de clases.

Ventajas Los clientes no necesitan conocer las clases que hay tras

la clase FACADE. Se pueden cambiar las clases “ocultadas” sin necesidad

de cambiar los clientes. Sólo hay que realizar los cambios necesarios en FACADE.

Page 56: Patrones de Diseño (Recopilación)

Patrón FACADEEl problema

56

La clase A debe saber cuál es exactamente la clase que le proporciona el servicio: b1() es de B, c1() de C, d1() de D, ...

Page 57: Patrones de Diseño (Recopilación)

Patrón FACADEEl problema

57

Page 58: Patrones de Diseño (Recopilación)

Patrón FACADELa solución

58

Page 59: Patrones de Diseño (Recopilación)

Patrón FACADEEjemplo: Estructurar un entorno de programación

59

Page 60: Patrones de Diseño (Recopilación)

Clasificación de los patronesGoF (gang of Four) [Gamma]

60

Page 61: Patrones de Diseño (Recopilación)

Patrón OBSERVER

61

Intención Definir una dependencia 1:n de forma que cuando el

objeto 1 cambie su estado, los n objetos sean notificados y se actualicen automáticamente

Motivación En un toolkit de GUI, separar los objetos de

presentación (vistas) de los objetos de datos, de forma que se puedan tener varias vistas sincronizadas de los mismos datos (editor-subscriptor)

Page 62: Patrones de Diseño (Recopilación)

Patrón OBSERVEREjemplo

62

Page 63: Patrones de Diseño (Recopilación)

Patrón OBSERVERLa solución

63

Page 64: Patrones de Diseño (Recopilación)

Patrón OBSERVERDiagrama de interacción

64

Page 65: Patrones de Diseño (Recopilación)

Patrón OBSERVERLa clase Observable

65

Page 66: Patrones de Diseño (Recopilación)

Patrón OBSERVEROtro Ejemplo

66

Page 67: Patrones de Diseño (Recopilación)

Patrón OBSERVEREjemplo: La clase Observable (el modelo)

67

Page 68: Patrones de Diseño (Recopilación)

Patrón OBSERVEREjemplo: La clase Observer (la vista)

68

Page 69: Patrones de Diseño (Recopilación)

Patrón OBSERVEREjemplo: El programa principal

69

Page 70: Patrones de Diseño (Recopilación)

70

Page 71: Patrones de Diseño (Recopilación)

71

Page 72: Patrones de Diseño (Recopilación)

72

Page 73: Patrones de Diseño (Recopilación)

Patrón OBSERVERInicialización

73

Page 74: Patrones de Diseño (Recopilación)

Patrón OBSERVERAdaptabilidad de la solución

74

Si se quisiera añadir un nuevo OBSERVER que en vez de pintar escribiera un número para cada color (1 si ROJO, 2 si VERDE, 3 si AZUL), ¿qué habría que hacer? Escribir nueva clase OBSERVER que implemente

“notificar”

Si se quisiera cambiar el SUBJECT para escoger el color pinchando un Checkbox en vez de escogerlo de un Choice Hay que sustituir el Subject y llamar a “notificar”

de los observers cuando se seleccione un nuevo Checkbox.

Page 75: Patrones de Diseño (Recopilación)

75

Page 76: Patrones de Diseño (Recopilación)

76

Page 77: Patrones de Diseño (Recopilación)

77

Page 78: Patrones de Diseño (Recopilación)

Patrón STRATEGY

78

Intención: Encapsular algoritmos relacionados en clases y

hacerlos intercambiables. Se permite que la selección del algoritmo se haga

según el objeto que se trate.

Ventajas Se permite cambiar el algoritmo dinámicamente Se eliminan sentencias condicionales para

seleccionar el algoritmo deseado

Page 79: Patrones de Diseño (Recopilación)

Patrón STRATEGYLa solución

79

Page 80: Patrones de Diseño (Recopilación)

Patrón STRATEGY

80

La clase Cliente necesita ejecutar un método: operac(), que puede ser implementado siguiendo distintos algoritmos. Se pueden implementar todos ellos (en las clases StrConcrX) y ser trasparente a Cliente.

Page 81: Patrones de Diseño (Recopilación)

Patrón STRATEGYImplementación

81

Page 82: Patrones de Diseño (Recopilación)

Patrón STRATEGYImplementación

82

Page 83: Patrones de Diseño (Recopilación)

Patrón ITERATOR

83

Intención: Proporcionar una forma de acceder a los elementos de

una colección de objetos de manera secuencial sin revelar su representación interna. Define una interfaz que declara métodos para acceder secuencialmente a la colección.

Ventajas: La clase que accede a la colección solamente a través de

dicho interfaz permanece independiente de la clase que implementa la interfaz.

Page 84: Patrones de Diseño (Recopilación)

Patrón ITERATOR

84

Participantes Iterador: define una interfaz para acceder a los elementos del

agregado y recorrerlos IteradorConcreto: implementa la interfaz de Iterador y mantiene la

posición actual del recorrido Agregado: define una interfaz para crear un objeto iterador AgregadoConcreto: implementa la interfaz de creación del iterador

para devolver una instancia apropiada de IteradorConcreto

Page 85: Patrones de Diseño (Recopilación)

Patrón ITERATOR

85

Ejemplos en Java:

Page 86: Patrones de Diseño (Recopilación)

86

Muchas Gracias...