Introducción a los patrones de Software Dpto. de Ingeniería de Sistemas y Computación Universidad de los Andes Material de base: Gloria Cortés y Rubby Casallas Referencias LARMAN, Craig. Applying UML and Patterns. Prentice Hall. 1998. Patrones GRASP, Cap. 18 1
Agenda Introducción a los Patrones Patrones GRASP Introducción a los Patrones Qué es un Patrón? Es una solución reutilizable de problemas recurrentes que ocurren durante el desarrollo del software Ayudan a entender las soluciones del problema con un vocabulario igual lo que permite un mejor entendimiento Existen diferentes tipos de patrones 2
Introducción a los Patrones Características Tiene un nombre Tiene un contexto o problema a resolver Tiene una solución Tiene unas consecuencias al utilizarlo Tipos de Patrones Arquitecturales - Buschmann Subdivisión de Sistemas (3) Layers, Pipes and Filter, Blackboard Sistemas Distribuidos (1) Broker Sistemas Interactivos (2) Model View Controller, Presentation Abstraction Control Sistemas Adaptables (2) Microkernel, Reflection 3
Tipos de Patrones Generales Grand Delegación, Interface, Immutable, Marker Interface, Proxy Estructurales Gamma y Grand Adapter, Iterator, Bridge, Facade, Flyweight, Virtual Proxy etc Creación Gamma y Grand Factory Method, Abstract Factory, Builder, Prototype, Singleton, Object Pool, etc. Tipos de Patrones Particionamiento Gamma y Grand Layered Initialization, Filter, Composite Comportamiento Gamma y Grand Command, Mediator, Observer, State, Strategy, Visitor. Concurrencia - Grand Single Thread Execution, Guarded Suspension, Balking, Read/Write Lock, Produce-Consumer Asignación de Responsabilidades Larman GRASP 4
Patrones General Buschmann 17 patrones Gamma 23 patrones Grand 41 patrones Larman 10 patrones Patrones GRASP General Responsability Assignment Software Patterns Asignación de Responsabilidades Expert Creator Low Coupling High Cohesion Controller 5
Patrones GRASP Motivación La asignación de responsabilidades es la habilidad más importante en el análisis y diseño orientado por objetos Respetar los principios fundamentales es uno de los factores críticos, para obtener diseños reutilizables, mantenibles y extendibles. GRASP: descripción de los principios fundamentales de la asignación de responsabilidades expresados como patrones Patrones GRASP En que consiste la responsabilidad? Obligaciones o contratos de una clase Dos clases de responsabilidades Conocer Conocer la información privada del objeto Conocer acerca de los objetos relacionados Conocer acerca de lo que se puede calcular o derivar 6
Patrones GRASP Hacer Realizar algo él mismo Iniciar acciones en otros objetos Controlar o coordinar actividades en otros objetos. Patrones GRASP Cuando se asignan resposabilidades? En la fase de análisis? Definición de los servicios de los componentes de la arquitectura global Responsabilidades de hacer Definición de los atributos de las clases del modelo conceptual del mundo. Definición de los diagramas de interacción, para refinar el modelo conceptual del mundo. 7
Patrones GRASP Cuando se asignan resposabilidades? En la fase de diseño: Diseño estructural, refinamiento del modelo conceptual del mundo Responsabilidades de conocer Definición de métodos Patrones GRASP Quién tiene la responsabilidad de: atender un evento del sistema? crear un objeto? realizar una operación (distinta de crear o responder un evento)? Cómo utilizar los patrones de evaluación: alta cohesión vs. bajo acoplamiento? 8
Expert pattern Cada objeto es responsable por mantener su propia información (principio de encapsulamiento): conoce y puede informar el valor de sus atributos puede modificar el valor de sus atributos Si tiene relaciones de agregación (fuerte) con otros objetos (sus partes), también será responsable de conocer la información de ellos, de crearlos (Creator pattern) y de delegarles las operaciones. Creator Pattern El objeto B tiene la responsabilidad de crear objetos de la clase A si: B agrega objetos A B contiene objetos A B registra objetos A B usa (exhaustivamente) objetos A B posee la información necesaria para inicializar A 9
Low coupling pattern Acoplamiento es la medida de cuánto una clase esta conectada (tiene conocimiento) de otras clases. Es un patrón evaluativo: un bajo acoplamiento permite que el diseño de clases sea más independiente. Reduce el impacto de los cambios y aumenta la reutilización. No puede ser considerado aisladamente. Puede no ser importante si la reutilización no es un objetivo. High cohesion pattern Cohesión funcional dentro de una clase es una medida que indica cuán relacionadas están las responsabilidades de una clase. Es un patrón evaluativo: entre más alta cohesión mas fácil de entender, de cambiar, de reutilizar. No puede ser considerado aisladamente. 10
11
12
13
14
Controller pattern (1) Asignar la responsabilidad de manejar los mensajes eventos del sistema a una clase que representa una de las siguientes elecciones: el sistema total la organización algo en le mundo real que está activo - por ejemplo el rol de una persona una manija artificial de los eventos del sistema relacionados con un caso de uso 15
Controller pattern (2) Un controller o varios? Usar los patrones de evaluación (cohesión/acoplamiento) para decidir. En particular, si hay muchos eventos, un solo objeto puede volverse poco cohesivo! Si es necesario guardar o asegurar una secuencia de eventos es mejor un controller por caso de uso. Controller pattern (3) Un controller despacha operaciones. Al principio del análisis existirá una clase: System servicio1() serviciok() Un controller NO es un objeto de la interfaz!! 16
Decisiones de diseño GRASP Refinamiento estructural Se modifica y completa el diagrama de clases del mundo Actividades de diseño Verificación de requerimientos contra el diagrama de clases Se realiza haciendo los diagramas de interacción para cada uno de los requerimientos Utilizar los patrones GRASP para justificar las decisiones que se tomen Documentar las decisiones tomadas y completar la información del diseño 17
Actividades de diseño Tipos de decisiones a tomar Agregar/eliminar clases, atributos, métodos o asociaciones Asignar cardinalidad a las asociaciones Asignar roles a las asociaciones Completar información de los atributos ( decidir tipo, representación y restricciones ) Completar información de los métodos ( parámetros, resultados, contrato) Evaluación de opciones atributo o asociación? 18