diseño de patrones

46
CLASE 9: DISEÑO CON PATRONES Universidad Simón Bolívar. Ing. de Software. Prof. Ivette C. Martínez

Upload: edwin-roman-castrillon

Post on 07-Jul-2015

2.154 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Diseño de patrones

CLASE 9: DISEÑO CON PATRONES

Universidad Simón Bolívar. Ing. de Software. Prof. Ivette C. Martínez

Page 2: Diseño de patrones

Diseño de Objetos

  Identificar requerimientos, crear un modelo del dominio, agregar métodos a las clases de software, definir mensajes para cumplir los requerimientos…

  Simple?!?  Qué métodos pertenecen a cada clase?  Como asignamos responsabilidades a las clases

  La herramienta crítica de diseño de software es una mente bien educada en los principios de diseño y en patrones de diseño

Page 3: Diseño de patrones

Diseño de Objetos: entradas

  PDV entradas al proyecto:  Texto del Caso de Uso Procesar Venta

 Definir el comportamiento  Diagrama de Secuencia del Sistema

 Identificar los mensajes del sistema  Los contratos de las operaciones

 Establecer los eventos a diseñar y detallar las post-condiciones a satisfacer

Page 4: Diseño de patrones

Diseño de Objetos: entradas

  PDV entradas al proyecto:  Especificaciones adicionales

 Define objetivos no-funcionales

 Glosario  Formato de los datos, datos relacionados con la interfaz de

usuario y la base de datos.  Modelo del Dominio

 Esquema inicial de los objetos de software en la capa del dominio de la arquitectura del software

Page 5: Diseño de patrones

Diseño Dirigido por Responsabilidades

  Una responsabilidad es un contrato u obligación de una clase.   Qué debe “conocer” una clase? [responsabilidad de

conocimiento]   Datos encapsulados privados   Objetos relacionados   Cosas que puede derivar o calcular

  Qué debe “hacer” una clase? [responsabilidad de acción]   Realizar una acción (crear un objeto, realizar un cálculo)   Iniciar una acción en otros objetos   Controlar/coordinar acciones en otros objetos

  Las responsabilidades se le asignan a los objetos durante el diseño de objetos

Page 6: Diseño de patrones

Ejemplos de Responsabilidades

  “Una venta es responsable de crear una VentaLineaDeProducto” (hacer)

  “Una venta es responsable de conoces su total” (conocer)   Las responsabilidades de conocimiento están relacionadas con

los atributos y las asociaciones en el modelo del dominio.   Las responsabilidades de acción pueden ser expresadas en

diferentes granularidades.   Las responsabilidades de acción son implementadas mediante

métodos.

Page 7: Diseño de patrones

Modelo del Dominio y Responsabilidades

  El modelo del Dominio ilustra los atributos y las asociaciones => inspira las responsabilidades de “conocimiento”

  Los métodos cumplen las responsabilidades  Solo (dentro del objeto mismo)  Mediante la colaboración con otros objetos y métodos

Page 8: Diseño de patrones

Patrones de Aprendizaje

  Las soluciones exitosas en muchas áreas del esfuerzo humano tienen sus raices en patrones.

 Un objetivo importante de la educación es transmitir patrones de aprendizaje de generación en generación.

  Ejemplos: Patrones usados para aprender ajedrez   Aprende a desarrollar buen software es parecido

a aprender a jugar bien ajedrez.

Page 9: Diseño de patrones

Qué es un patrón ?

•  Cada Patrón describe un problema que ocurre una y otra vez en nuestro ambiente, y luego describe el núcleo de la solución a ese problema, de forma tal que esa solución puede ser usada un millón de veces, sin hacerlo de la misma manera dos veces.

C. Alexander, “The Timeless Way of Building”, 1979

Page 10: Diseño de patrones

Visión de patrones de Alexander

  Regla de tres partes que expresa una relación entre cierto contexto, un problema y una solución.

  Elemento del mundo – una relación entre  un contexto  un sistema de fuerzas que ocurren repetidamente

en el contexto  una configuración espacial que permite que las

fuerzas se resuelvan ellas mismas

Page 11: Diseño de patrones

Visión de patrones de Alexander

  Elemento de lenguaje ��� – una instrucción  Describe como la configuración espacial puede se

usada repetitivamente.  para resolver el sistema de fuerzas dado  en cualquier lugar en que el contexto la hace

relevante   La dualidad “objeto – proceso”

 Un objeto que ocurre en el mundo  Un proceso (regla) que genera ese objeto

Page 12: Diseño de patrones

Por qué usar patrones ?

 “Los patrones te ayudan a aprender de los éxitos de otros en lugar de aprender de tus errores”

Mark Johnson (citado por B. Eckel)

Page 13: Diseño de patrones

Por qué usar patrones ?

 Una capa de abstracción adicional  Separar las cosas que cambian de las cosas que

permanecen iguales  Extraer los factores comunes entre una familia de

problemas similares  Una forma inteligente y profunda de resolver

una clase particular de problemas  Soluciones más generales y flexibles

Page 14: Diseño de patrones

Patrones de diseño

  Los patrones de diseño representan soluciones a problemas que surgen cuando se desarrolla software en un contexto particular.  Patrones = par Problema/Solución dentro de

un Contexto

Page 15: Diseño de patrones

Patrones de Diseño

  Capturan la estructura estática y dinámica, y la colaboración entre los participantes claves del diseño del software  participante clave – abstracción principal que ocurre

en un problema de diseño  Útil para articular el cómo y el por qué resolver las

fuerzas no funcionales.

  Facilita la reutilización de arquitecturas y diseños de software exitoso

Page 16: Diseño de patrones

Ejemplo: Vistas de datos, problema de consistencia

Page 17: Diseño de patrones

El patrón Observer

  Propósito  Definir una dependencia de uno-a-muchos entre objetos

de manera que cuando un objeto cambia de estado, todas sus dependencias son notificadas y actualizadas automáticamente.

  Fuerzas  Puede haber muchos observadores  Cada observador puede reaccionar de forma diferente

a la misma notificación  La fuente de datos (sujeto) debe estar tan desacoplada

como sea posible del observador.

Page 18: Diseño de patrones

Estructura del patrón Observer

Page 19: Diseño de patrones

Colaboración en el patrón Observer

Page 20: Diseño de patrones

Qué lo hace un patrón?

  Un patrón debe:  Resolver un problema, i.e., debe ser útil  Tener un contexto, i.e., describir cuando la solución puede

ser utilizada  Reutilizarse, i.e., debe ser relevante en otras situaciones  Enseñar, i.e, debe proporcionar suficiente información

para la elaboración de la solución  Tener un nombre, para referirse a él de forma

consistente.

Page 21: Diseño de patrones

Formato GoF de un Patrón de Diseño

Nombre del patrón y clasificación Propósito qué hace el patrón También conocido como

otros nombres del patrón (opcional) Motivación el problema de diseño Aplicabilidad situaciones donde el patrón puede

ser aplicado

Page 22: Diseño de patrones

Formato GoF de un Patrón de Diseño

Estructura Una representación gráfica de las clases dentro del patrón

Participantes Las clases y objetos participantes y sus responsabilidades

Colaboraciones De los participantes para llevar a cabo sus responsabilidades

Consecuencias trade-offs, preocupaciones, …

Page 23: Diseño de patrones

Formato GoF de un Patrón de Diseño

Implementación Hints, Técnicas

Código de Ejemplo Fragmento de código que muestra una implementación posible

Usos conocidos Patrones que se encuentran en sistemas reales

Patrones relacionados Patrones estrechamente relacionados

Page 24: Diseño de patrones

Diseño con patrones

 Patrones de diseño GRASP  Patrones de diseño GoF  Enterprise patterns

Page 25: Diseño de patrones

Diseño con patrones

 Patrones de diseño GRASP  General Responsability Assignment Software

Patterns.  Patrones de Principios Generales para Asignar

Responsabilidades  “Describen los principios fundamentales de diseño

de objetos y la asignación de responsabilidades, expresados como patrones”. Craig Larman.

 Constituyen la base del CÓMO se diseñará el sistema.

 Se aplican en los primeros momentos del diseño

Page 26: Diseño de patrones

Patrones GRASP

  Responsabilidades  UML define una responsabilidad como “un contrato u

obligación de un clasificador”.  Las responsabilidades están relacionadas con las obligaciones

de un objeto en cuanto a su comportamiento.  Básicamente, estas responsabilidades son de los siguientes

dos tipos:  Conocer:

  Conocer los datos privados encapsulados;   Conocer los objetos relacionados   Conocer las cosas que puede derivar o calcular.

 Hacer:   Hacer algo él mismo, como crear un objeto o hacer un cálculo;   Iniciar una acción en otros objetos;   Controlar y coordinar actividades en otros objetos.

Page 27: Diseño de patrones

Patrones GRASP

  Patrones de diseño GRASP  Experto en información  Creador  Alta cohesión  Bajo Acoplamiento  Controlador  Polimorfismo  Fabricación Pura   Indirección  Variaciones Protegidas

Page 28: Diseño de patrones

Patrones GRASP

 Experto en información  Problema:

¿ Cuál es el principio general para asignar responsabilidades a los objetos ?

 Solución : Asignar una responsabilidad al experto en información – la clase que tiene la información necesaria para realizar la responsabilidad. Un Experto es una clase que tiene toda la información necesaria para implementar una responsabilidad.

 Ventajas:  Encapsulamiento de la información;  Distribución del comportamiento del manejo de la

información

Page 29: Diseño de patrones

Patrones GRASP

  Experto en información

Page 30: Diseño de patrones

Patrones GRASP

  Creador  Problema:

¿Quién debería ser el responsable de la creación de una nueva instancia de alguna clase?

 Solución: B es un Creador de A si se asigna a la clase B la responsabilidad de crear una instancia de la clase A y si se cumple uno o más de los casos siguientes:  B agrega objetos de A;  B contiene objetos de A;  B registra instancias de objetos de A;  B utiliza más estrechamente objetos de A;  B tiene los datos de inicialización que se pasarán a un objeto de A

cuando sea creado( por lo tanto, B es un Experto con respecto a la creación de A)

Page 31: Diseño de patrones

Patrones GRASP

  Creador  El patrón Creador guía la asignación de responsabilidades

relacionadas con la creación de objetos (una tarea muy común). La intención básica del patrón es encontrar un creador que necesite conectarse al objeto creado en alguna situación.

 Ventajas:  Bajo acoplamiento logrando mayor mantenibilidad y

reutilización.  Desventajas:

 Puede ser muy compleja la operación de creación de instancia. Se puede aplicar el patrón de diseño Factory.

Page 32: Diseño de patrones

Patrones GRASP

  Creador

Page 33: Diseño de patrones

Patrones GRASP

 Bajo Acoplamiento  Problema:

¿Cómo soportar bajas dependencias, bajo impacto del cambio e incremento de la reutilización?

 Solución: Asignar una responsabilidad de manera que el acoplamiento permanezca bajo.

 El acoplamiento es una medida de la fuerza con que un elemento está conectado a, tiene conocimiento de, confía en, otros elementos.

Un elemento con bajo (o débil) acoplamiento no depende demasiado de otros elementos.

Page 34: Diseño de patrones

Patrones GRASP

 Bajo Acoplamiento  El patrón Bajo Acoplamiento es un principio a tener

en mente en todas las decisiones de diseño. Es un principio evaluativo que aplica un diseñador mientras evalúa todas las decisiones de diseño.

 El Bajo Acoplamiento soporta clases más independientes

 Ventajas:  No afectan los cambios en otros componentes;  Fácil de entender de manera aislada;  Conveniente para reutilizar

Page 35: Diseño de patrones

Patrones GRASP

  Bajo Acoplamiento  ¿Qué diseño, basado en la asignación de

responsabilidades, soporta Bajo Acoplamiento?

Page 36: Diseño de patrones

Patrones GRASP

  Bajo Acoplamiento  ¿Qué diseño, basado en la asignación de

responsabilidades, soporta Bajo Acoplamiento?  Desde el punto de vista puramente del acoplamiento, es

preferible el segundo diseño porque mantiene el acoplamiento global más bajo.

 Este es un ejemplo en el que dos patrones- Bajo Acoplamiento y Creador – podrían sugerir soluciones diferentes.

Page 37: Diseño de patrones

Patrones GRASP

 Alta cohesion  Problema:

¿Cómo mantener la complejidad manejable?  Solución:

Asignar una responsabilidad de manera que la cohesión permanezca alta.

 En cuanto al diseño de objetos, la cohesión (cohesión funcional) es una medida de la fuerza con la que se relacionan y del grado de focalización de las responsabilidades de un elemento.

Page 38: Diseño de patrones

Patrones GRASP

 Alta cohesion

 Una clase con baja cohesión hace muchas cosas no relacionadas, o hace demasiado trabajo:  Clases difíciles de entender;  Difíciles de reutilizar;  Difíciles de mantener;  Delicadas, constantemente afectadas por los

cambios.

Page 39: Diseño de patrones

Patrones GRASP

 Alta cohesion  Como regla empírica, una clase con alta cohesión

tiene:  Un número relativamente pequeño de métodos, con

funcionalidad altamente relacionada,  No realiza mucho trabajo.  Colabora con otros objetos para compartir el esfuerzo si

la tarea es extensa.

 No es conveniente recargar el trabajo o incluir funcionalidad en la clase que responde a los eventos del sistema.

Page 40: Diseño de patrones

Patrones GRASP

 Alta cohesion  Ventajas:

 Incrementa la claridad y facilita la comprensión del diseño;

 Simplifica el mantenimiento y las mejoras;  Soporta a menudo bajo acoplamiento  Incrementa la reutilización

Page 41: Diseño de patrones

Patrones GRASP

 Controlador  Problema:

¿Quién debe ser el responsable de gestionar un evento de entrada del sistema?

 Solución: Asignar la responsabilidad de recibir o manejar un mensaje de evento del sistema a una clase que representa una de las siguientes operaciones:  Representa el sistema global, dispositivo o subsistema (Controlador

de Fachada);  Representa un escenario de caso de uso en el que tiene lugar el

evento del sistema (controlador de Sesión de Caso de Uso).   Utilizar la misma clase controlador para todos los eventos del sistema

en el mismo escenario de caso de uso;   Una sesión es una instancia de una conversación con un actor

Page 42: Diseño de patrones

Patrones GRASP

  Controlador  Las clases “ventana”, “applet”, “vista”, etc., no están en la

lista debido a que tales clases no deben abordar las tareas asociadas con los eventos del sistema, sino que, reciben estos eventos y los delegan a un controlador.

 Evento del sistema de entrada   Es un evento generado por un actor externo. Se asocian con

operaciones del sistema – operaciones del sistema como respuesta a los eventos del sistema -, tal como se relacionan los mensajes y los métodos.

 Un Controlador   Es un objeto que no pertenece a la interfaz de usuario, responsable

de recibir o manejar un evento del sistema. Un Controlador define los métodos para las operaciones del sistema.

Page 43: Diseño de patrones

Patrones GRASP

Page 44: Diseño de patrones

Patrones GRASP

 Controlador  Normalmente un controlador delega en otros

objetos el trabajo que se necesita hacer; coordina o controla la actividad. No realiza mucho trabajo por sí mismo.

 Tipos de controladores:  Controlador de Fachada:

 Representa al sistema global, dispositivo o subsistema.

 Controlador de casos de uso:  Construcción artificial para dar soporte al sistema.

Se utilizan cuando los Controladores de Fachada conduce a diseños con baja cohesión o alto acoplamiento.

Page 45: Diseño de patrones

Patrones GRASP

 Controlador  Ventajas:

 Aumenta el potencial para reutilizar las interfaces;  Razonamiento sobre el estado (secuencia de pasos) de los

casos de uso.

Page 46: Diseño de patrones

Patrones GRASP

 Controlador