clase 9: diseÑo con patrones - ldc.usb.veci3715/teoria/patrones.pdf · diseño de objetos...

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

Upload: tranxuyen

Post on 08-Oct-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

CLASE 9:DISEÑO CON PATRONES

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

Diseño de Objetos

� Identificar requerimientos, crear un modelo del dominio, agregar métodosa las clases de software, definir mensajespara cumplir los requerimientos…

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

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

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

Ejemplos de Responsabilidades

� “Una ventaes responsable de crear una VentaLineaDeProducto” (hacer)

� “Una ventaes responsable de conocersu 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 son implementadas mediante

métodos.

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 aprendizajede generación en generación.

� Ejemplos: Patrones usados para aprender ajedrez

� Aprende a desarrollar buen software es parecido a aprender a jugar bien ajedrez.

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

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)

Por qué usar patrones ?

� Una capa de abstracciónadicional� 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

Patrones de diseño

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

un Contexto

Ejemplo: Vistas de datos, problema de consistencia

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.

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.

Formato GoF (Gang-of-Four) de un Patrón de Diseño

Nombre del patrón y clasificaciónPropósitoqué hace el patrónTambién conocido como

otros nombres del patrón (opcional) Motivaciónel problema de diseñoAplicabilidadsituaciones donde el patrón puede

ser aplicado

Formato GoF de un Patrón de Diseño

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

ParticipantesLas clases y objetos participantes y sus responsabilidades

ColaboracionesDe los participantes para llevar a cabo sus responsabilidades

Consecuenciastrade-offs, preocupaciones, …

Formato GoF de un Patrón de Diseño

ImplementaciónHints, Técnicas

Código de EjemploFragmento de código que muestra una implementación posible

Usos conocidosPatrones que se encuentran en sistemas reales

Patrones relacionadosPatrones estrechamente relacionados

Diseño con patrones

� Patrones de diseño GRASP� Patrones de diseño GoF

� Enterprise patterns

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

Patrones GRASP

� Responsabilidades� UML define una responsabilidadcomo “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 y Hacer

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

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ónnecesaria 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

Patrones GRASP

� Experto en información

Patrones GRASP

� Experto en información� ¿Quién debería ser el responsable de almacenar Venta

en una base de datos?

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 agregaobjetos de A;� B contieneobjetos de A;� B registra instancias de objetos de A;� B utiliza más estrechamenteobjetos de A;� B tiene los datos de inicializaciónque 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)

Patrones GRASP

� Creador� El patrón Creadorguí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.

Patrones GRASP

� Creador

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 acoplamientoes 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.

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

Patrones GRASP

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

responsabilidades, soporta Bajo Acoplamiento?

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.

Patrones GRASP

� Bajo Acoplamiento� Una subclase está fuertemente acoplada a su superclase.

Ejemplo: ObjetoPersistente

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.

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.

Patrones GRASP

� Alta cohesion

�Baja cohesión: FachadaBD con muchos métodos.

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.

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

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 sistemaa 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

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 sistemade 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.

Patrones GRASP

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.

Patrones GRASP

� Controlador� Ventajas:

� Aumenta el potencial para reutilizar las interfaces;

� Razonamiento sobre el estado (secuencia de pasos) de los casos de uso.

Patrones GRASP

� Controlador