Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
1
Introducción a los
patrones de SoftwareDpto. de Ingeniería de Sistemas y ComputaciónUniversidad de los AndesMaterial de base: Gloria Cortés y Rubby Casallas
Referencias
LARMAN, Craig. Applying UML andPatterns. Prentice Hall. 1998.Patrones GRASP, Cap. 18
2
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
3
Introducción a los Patrones Características
Tiene un nombreTiene un contexto o problema a resolverTiene una soluciónTiene 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
4
Tipos de Patrones Generales – Grand
Delegación, Interface, Immutable, MarkerInterface, Proxy
Estructurales – Gamma y GrandAdapter, 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
5
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
ExpertCreatorLow CouplingHigh CohesionController
6
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
7
Patrones GRASP Hacer
Realizar algo él mismo Iniciar acciones en otros objetosControlar 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.
8
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?
9
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 AB contiene objetos AB registra objetos AB usa (exhaustivamente) objetos AB posee la información necesaria para
inicializar A
10
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.
15
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ónalgo en le mundo real que está activo - por
ejemplo el rol de una personauna manija artificial de los eventos del
sistema relacionados con un caso de uso
16
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:
Un controller NO es un objeto de la interfaz !!
System
servicio1()
serviciok()
17
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 clasesSe 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
18
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?