Documente Academic
Documente Profesional
Documente Cultură
Resumen
Este tema introduce el diseo orientado a objetos, incidiendo en tres aspectos como son la disciplina de diseo dentro del Proceso Unificado, el diseo de la arquitectura del software, destacando la utilizacin de un patrn Capas para estructurar la arquitectura de los sistemas, y, por ltimo, se introducen los patrones de diseo, tomando como referencias principales los patrones de GoF (Gang of Four) [Gamma et al., 1995] y los patrones POSA (Pattern Oriented Software Architecture) [Buschmann et al., 1996], aunque tambin se har mencin a los patrones GRASP (General Responsibility Assignment Software Patterns) [Larman, 2002] Diseo orientado a objetos; Diseo arquitectnico; Proceso Unificado; Subsistema de diseo; Clase de diseo; Modelo de despliegue; Arquitectura del software; Patrn software; Patrn de diseo; Responsabilidad [Gamma et al., 2003] [Jacobson et al., 2000] Captulo 9 [Larman, 2003] Captulos 16 y 22 [Pressman, 2002] Captulo 22 [Sommerville, 2002] Captulo 12
Dr. Francisco J. Garca Pealvo
Resumen
Descriptores
Bibliografa
Esquema Introduccin Diseo en el Proceso Unificado Diseo de la arquitectura Patrones de diseo orientado a objetos Aportaciones principales del tema Ejercicios Lecturas complementarias Referencias
1. Introduccin
Definicin de DOO
DOO es el proceso que modela el dominio de la solucin, lo que incluye a las clases semnticas con posibles aadidos, y las clases de interfaz, aplicacin y utilidad identificadas durante el diseo [Monarchi y Puhr, 1992] El objetivo es reexaminar las clases del dominio del problema, refinndolas, extendindolas y reorganizndolas, para mejorar su reutilizacin y tomar ventaja de la herencia El diseo casa con el dominio de la solucin Los objetos del dominio de la solucin incluyen: objetos de interfaz, objetos de aplicacin y objetos base o de utilidad El nfasis del diseo est en DEFINIR LA SOLUCIN
Los objetos y relaciones identificadas en la fase de anlisis sirven de entrada a la fase de diseo y como primera capa de diseo El sistema se concibe como una coleccin de objetos que interaccionan El estado del sistema est descentralizado y cada objeto gestiona su propio estado Los objetos son instancias de una clase de objetos y se comunican invocando mtodos
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
Herencia
Extensibilidad del sistema Refleja la abstraccin y estructura presente en un dominio de la aplicacin Identifica y encapsula elementos comunes en abstracciones de alto nivel
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
Un proceso de DOO simple Comprender y definir el contexto y los modos de utilizacin del sistema Disear la arquitectura del sistema Identificar los objetos principales del sistema Desarrollar los modelos de diseo Especificar las interfaces de los objetos
[Sommerville, 2002]
Definicin de las relaciones entre los elementos estructurales principales del software Desarrollo de una estructura modular y de la representacin del control entre mdulos Adaptacin de la estructura lgica del Modelo de Anlisis al entorno de implementacin y preparacin para su implementacin Incorporacin de los requisitos no funcionales
10
Diseo de interfaces
Diseo y documentacin de las interfaces entre subsistemas Diseo y documentacin de la interfaz entre el sistema software y el usuario
Diseo detallado
Asignar servicios a los diferentes componentes y disear sus interfaces Detallar cada componente a un nivel suficiente para su codificacin
11
12
Disciplina de diseo
Fases
Disciplinas
Requisitos
Inicio
Elaboracin
Construccin
Transicin
Anlisis
Diseo
Implementacin
Pruebas Iteraciones preliminares iter. #1 iter. #2 iter. #n iter. #n+1 iter. #n+2 iter. #m iter. #m+1
Iteraciones
13
Arquitecto
Ingeniero de componentes
responsable de
responsable de
responsable de
Clases de Diseo
Subsistema de diseo
Interfaz
14
Artefactos propios del diseo en el Proceso Unificado Modelo de diseo Clase de diseo Realizacin de casos de uso diseo Subsistema de diseo Interfaz Modelo de despliegue Descripcin de la arquitectura
15
Los subsistemas de diseo y las clases de diseo representan abstracciones del subsistema y componentes de la implementacin del sistema Los casos de uso son realizados por los objetos de las clases de diseo
16
1 1
* * * * *
Interfaz
Clase de diseo
17
Clase de diseo
Representa una abstraccin de una o varias clases (o construccin similar) en la implementacin del sistema Esta abstraccin es sin costuras debido a [Jacobson et al., 1999]
El lenguaje utilizado para especificar una clase de diseo es el mismo que el lenguaje de programacin utilizado Se especifica la visibilidad de atributos y operaciones, utilizando con frecuencia los trminos derivados de C++ Las relaciones entre clases de diseo suelen tener un significado directo cuando la clase es implementada Los mtodos de una clase de diseo tienen correspondencia directa con el correspondiente mtodo en la implementacin de las clases Una clase de diseo puede aparecer como un estereotipo que se corresponde con una construccin en el lenguaje de programacin dado Una clase de diseo se puede realizar, esto es, proporcionar interfaces si tiene sentido hacerlo en el lenguaje de programacin Una clase de diseo se puede activar, implicando que objetos de la clase mantengan su propio hilo de control y se ejecuten concurrentemente con otros objetos activos
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
18
Realizacin de caso de uso diseo Es una colaboracin en el modelo de diseo que describe cmo se realiza un caso de uso especfico Una vista del modelo de diseo centrado en los siguientes artefactos significativos desde el punto de vista de la arquitectura
Diagramas de clases: Clases de diseo, sus caractersticas y relaciones Diagramas de interaccin: Diagramas de secuencia, diagramas de estado Flujo de eventos diseo Requisitos de implementacin
19
Subsistema de diseo
Son una forma de organizar los artefactos del modelo del diseo en piezas ms manejables Deben ser una coleccin cohesiva de clases de diseo, realizaciones de caso de uso, interfaces y otros subsistemas El acoplamiento entre subsistemas ha de ser mnimo Utilizados para separar los aspectos del diseo Las dos capas de aplicacin de ms alto nivel y sus subsistemas dentro del modelo de diseo suelen tener trazas directas hacia paquetes del anlisis Los subsistemas pueden representar componentes de grano grueso en la implementacin del sistema, es decir, componentes que proporcionan varias interfaces a partir de otros elementos de grano ms fino, y que se convierten ellos mismos en ejecutables, ficheros binarios o entidades similares que pueden distribuirse en diferentes nodos Pueden representar productos software reutilizados que han sido encapsulados en ellos Pueden representar sistemas heredados o partes de ellos
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
20
Interfaz
Especifica una coleccin de operaciones pblicas, tipos y parmetros necesarios para acceder y usar las capacidades de una clase de diseo o un subsistema Una clase de diseo que realice una interfaz debe proporcionar los mtodos que implementen las operaciones de la interfaz Un subsistema que realice una interfaz debe conectar tambin clases del diseo u otros subsistemas (recursivamente) que proporcionen la interfaz Las interfaces son una forma de separar la especificacin de la funcionalidad La mayora de las interfaces entre subsistemas se consideran relevantes para la arquitectura debido a que definen las interacciones permitidas entre los subsistemas
21
Modelo de despliegue Es un modelo de objetos que describe la distribucin fsica del sistema en trminos de cmo se distribuye la funcionalidad entre los nodos de cmputo
Correspondencia entre la arquitectura software y la arquitectura del sistema
Cada nodo representa un recurso de cmputo, normalmente un procesador o un dispositivo hardware similar Los nodos poseen relaciones que representan medios de comunicacin entre ellos El modelo de despliegue puede describir diferentes configuraciones de red La funcionalidad de un nodo se define por los componentes que se distribuyen en ese nodo
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
22
Descripcin de la arquitectura Contiene una vista de la arquitectura del modelo de diseo que muestra sus artefactos relevantes para la arquitectura
Subsistemas, sus interfaces y las dependencias entre ellos Clases de diseo fundamentales con una traza a las clases de anlisis significativas y clases activas Realizaciones de caso de uso diseo que describan una funcionalidad importante y crtica y que deban desarrollarse pronto en el ciclo de vida
Contiene una vista de la arquitectura del modelo de despliegue que muestra los artefactos relevantes para la arquitectura
23
3. Diseo de la arquitectura
24
Introduccin
El objetivo es esbozar los modelos de diseo y despliegue y su arquitectura mediante la identificacin de
Los nodos y sus configuraciones de red Los subsistemas y sus interfaces Las clases de diseo significativas para la arquitectura Los mecanismos de diseo genricos que tratan requisitos comunes
Subsistema (esbozo)
Interfaz (esbozo) Requisitos adicionales Arquitecto Clase de diseo (esbozo) Modelo de anlisis Diseo de la arquitectura
Descripcin de la Descripcin de la arquitectura arquitectura (vista anlisis) (vista de diseo y despliegue) Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
25
26
27
Algunas partes de un paquete del anlisis se realizan mediante productos software reutilizados
Estas funcionalidades pueden asignarse a capas intermedias o subsistemas de software del sistema
Los paquetes del anlisis no representan una divisin adecuada del trabajo Los paquetes del anlisis no representan la incorporacin de un sistema heredado
Se puede encapsular un sistema heredado, o parte de l, mediante un subsistema de diseo independiente
Los paquetes del anlisis no estn preparados para una distribucin directa sobre los nodos
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
28
La seleccin e integracin de productos software que se compran o se construyen son dos de los objetivos fundamentales durante las fases de inicio y elaboracin
29
Identificacin de subsistemas y de sus interfaces (iv) Patrn de capas propuesto en [Jacobson et al., 1999]
Capa especfica de la aplicacin
Capa intermedia
30
Gestin de cuentas
Java.applet
Java.awt
Java.rmi
Capa intermedia
Mquina virtual Java Navegador de Internet
31
Identificacin de clases de diseo Se pueden esbozar inicialmente algunas clases a partir de las clases del anlisis
Se pueden utilizar las relaciones entre esas clases para identificar un conjunto tentativo de relaciones entre las correspondientes clases de diseo
Se deben identificar tambin las clases activas necesarias en el sistema, considerando los requisitos de concurrencia del mismo
Requisitos de rendimiento, tiempo de respuesta y disponibilidad de los diferentes actores en su interaccin con el sistema Distribucin del sistema sobre los nodos Otros requisitos sobre el arranque y terminacin del sistema, progresin, evitar interbloqueos, evitar la inanicin, reconfiguracin de los nodos y la capacidad de los nodos
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
32
El resultado es un conjunto de mecanismos genricos de diseo que pueden manifestarse como clases, colaboraciones o incluso como subsistemas Los requisitos que deben tratarse suelen estar relacionados con aspectos como
Persistencia Distribucin transparente de objetos Caractersticas de seguridad Deteccin y recuperacin de errores Gestin de transacciones
33
34
Introduccin (i) La experiencia es tan importante como las notaciones para recoger y representar los diseos y las reglas de uso de esas notaciones Los patrones de diseo identifican y nombran temas abstractos comunes en el diseo orientado al objeto Usos de los patrones de diseo en el proceso de desarrollo orientado al objeto
Proporcionan un vocabulario comn Constituyen una base de experiencias reutilizables Ayudan a la reduccin del tiempo de aprendizaje de una biblioteca de clases Proporcionan un objetivo para la reorganizacin o la refactorizacin
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
35
Una forma de documentar resolucin de problemas de la ingeniera del software Una idea reutilizable Una relacin entre un contexto, un problema y una solucin Identificacin de buenas estructuras de diseo que se repiten en la prctica
36
Definicin
Un patrn es una regla que establece una relacin entre un contexto, un sistema de fuerzas que aparecen en el contexto y una configuracin [Alexander, 1979] Un patrn es una descripcin en un formato fijo de cmo solucionar un cierto tipo de problemas [Reenskaug et al., 1996] Cada patrn es una regla constituida por tres partes, la cual expresa una relacin entre un cierto contexto, un cierto sistema de fuerzas que ocurren repetidamente en ese contexto, y una cierta configuracin software que permite a estas fuerzas resolverse as mismas [Coplien, 2003] Un patrn es una unidad de informacin instructiva con nombre que captura la estructura esencial y la comprensin de una familia de soluciones exitosas probadas para un problema recurrente que ocurre dentro de un cierto contexto y de un sistema de fuerzas [Appleton, 2000] Un patrn es un par problema/solucin que tiene un nombre y que puede aplicarse en contextos nuevos, con las instrucciones correspondientes acerca de cmo utilizarlo en una situacin nueva [Larman, 2002] Un patrn de diseo es una descripcin de clases y objetos comunicndose entre s, adaptada para resolver un problema de diseo general en un contexto particular [Gamma et al., 1995] Un patrn de diseo es una abstraccin de un problema de diseo general, que ocurre recurrentemente en contextos especficos no arbitrarios [Aklecha, 1999]
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
37
38
Contexto
Para describir cuando ha de aplicarse el patrn e indicar el entorno y condiciones que han de existir para que el patrn de diseo sea aplicable y la solucin funcione
Problema
Declaracin del problema y/o intencin de la solucin
Caractersticas (fuerzas)
Indica los atributos del diseo que han de ajustarse para permitir que el patrn se acomode a una gran variedad de problemas Son objetivos y restricciones; factores que lo motivan; indicaciones de por qu el problema es complicado
39
Solucin
Para describir una solucin de propsito general al problema que contempla el patrn Indica cmo generar la solucin, la estructura y sus participantes y colaboraciones
Estructural: Diagrama de clases (esttica) Comportamiento: Diagramas de interaccin (dinmica)
Ejemplo
Ejemplo de utilizacin del patrn
Patrones relacionados
Patrones que son similares; patrones que usa o que son usados por l
Usos conocidos
Universidad de Salamanca Departamento de Informtica y Automtica
40
Tipos de patrones
Anlisis
Describe la estructura y el flujo de trabajo en un dominio especfico [Fowler, 1996]
Organizativos
Ayudan en la organizacin del desarrollo del software
Arquitectnico
Un patrn arquitectnico expresa un esquema organizativo estructural fundamental para un sistema software Proporciona un conjunto de subsistemas predefinidos, sus responsabilidades, e incluye reglas y recomendaciones para organizar las relaciones entre ellos
Diseo
Un patrn de diseo proporciona un esquema para el refinamiento de subsistemas o componentes de un sistema software, o las relaciones entre ellos Describe un estructura recurrente comn de componentes que se comunican y que resuelven un problema general de diseo dentro de un contexto particular
Idiomas
Un idioma es un patrn de bajo nivel especfico de un lenguaje de programacin Un idioma describe cmo implementar un aspecto particular de los componentes o de sus relaciones utilizando las caractersticas del lenguaje concreto
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
41
mbito
Si el patrn se aplica a clases o a objetos
42
Patrones de diseo
De menor escala que los patrones arquitectnicos y sin efectos sobre la estructura fundamental de los sistemas software Proporcionan un esquema para refinar los subsistemas o componentes de un sistema software o las relaciones entre ellos Describen un estructura frecuente de componentes que se comunican y que resuelven un problema general de diseo en un contexto particular Ejemplos: Observer, Publisher-Subscriber
Idiomas
Son patrones de bajo nivel especficos de lenguajes de programacin Describen cmo implementar aspectos particulares de componentes o las relaciones entre ellos utilizando las caractersticas de un lenguaje dado Ejemplo: while (*destino++ = *src++);
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
43
Sistemas distribuidos
Patrones que proporcionan infraestructuras para sistemas que tienen componentes situados en procesos diferentes o en varios subsistemas y componentes
Sistemas interactivos
Patrones que ayudan a estructurar sistemas con interaccin hombre-mquina
Sistemas adaptables
Patrones que proporcionan infraestructuras para la extensin y adaptacin de aplicaciones en respuesta a requisitos funcionales que cambian y evolucionan
Descomposicin estructural
Patrones que soportan una descomposicin adecuada de subsistemas y componentes complejos en partes cooperativas
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
44
Control de acceso
Patrones de vigilan y controlan el acceso a los servicios o componentes
Gestin
Patrones para el manejo de colecciones homogneas de objetos, servicios y componentes en su totalidad
Comunicacin
Patrones que ayudan a organizar la comunicacin entre componentes
Manejo de recursos
Patrones que ayudan a gestionar componentes y objetos compartidos
45
POSA Patrones
POSA
Estructuracin Sistemas distribuidos Sistemas interactivos Sistemas adaptables Descomposicin estructural Organizacin del trabajo Control acceso Gestin Comunicacin Arquitectnicos
Layers; Pipes&Filters; Blackboard Broker Pipes&Filters Microkernel MVC; PAC Microkernel, Reflection Whole-Part Master-Slave Proxy Command Processor View Handler Publisher-Subscriber Forwarder-Receiver Client-Dispatcher-Server Counted Pointer
Dr. Francisco J. Garca Pealvo
Diseo
Idiomas
Manejo recursos
Universidad de Salamanca Departamento de Informtica y Automtica
46
GoF Introduccin
Tres partes esenciales de un patrn de diseo
Una descripcin abstracta de una clase o una colaboracin de objetos y su estructura El tema del diseo del sistema abordado por la estructura abstracta Las consecuencias de la aplicacin de la estructura abstracta a la arquitectura del sistema
Plantilla bsica
Nombre del patrn de diseo Intencin Tambin conocido como Motivacin Aplicabilidad Estructura Participantes Colaboraciones Consecuencias Implementacin Cdigo de ejemplo Usos conocidos Patrones relacionados
47
Objeto
Relaciones de iguales entre objetos (peer objects)
Composicin
Estructuras recursivas de objetos
Propsito
Qu hacer
Creacin
Proceso de creacin de objetos
Estructural
Composicin de clases y objetos
Comportamiento
Las formas en las que las clases y objetos interaccionan y se distribuyen las responsabilidades
48
Patrones de comportamiento Cmo cooperan las clases con sus subclases para ajustarse a su semntica
Template Method
mbito de objeto
Patrones de creacin Cmo se crean conjuntos de objetos
Abstract Factory
Patrones estructurales Cmo juntar objetos para hacerse cargo de una funcionalidad nueva
Proxy, Flyweight
Patrones de comportamiento Cmo un grupo de objetos equivalentes (peer) coperan para llevar a cabo una tarea que un objeto por s solo no puede llevar a cabo
Mediator, Chain of Responsibility, Observer, Model-View, Strategy
mbito de composicin
Patrones de creacin Cmo crear una estructura recursiva de objetos
Builder
Iterator
49
GoF Patrones
Propsito Creacin mbito Clase Objeto Estructural Comportamiento
Adapter (class) Bridge (class) Adapter (object) Bridge (object) Flyweight Glue Proxy
Template method Chain of Responsibility Command Iterator (object) Mediator Memento Observer State Strategy Interpreter Iterator (compound) Walker
Composicin
Builder
Composite Wrapper
50
Diseo
Interpreter (GOF)
Idiomas
51
Idiomas
52
GRASP Introduccin
GRASP (General Responsibility Assignment Software Patterns) No son patrones reales
Son descripciones formales de principios fundamentales del diseo orientado a objetos y de la asignacin de responsabilidades expresados como patrones
53
54
55
MVC (i) El patrn MVC es un patrn arquitectnico [Buschman et al., 1996] Pertenece a la categora de los patrones para sistemas interactivos Se encuentra en muchos sistemas interactivos y frameworks de aplicacin para software con interfaces grficas (MacApp, ET++, bibliotecas de Smalltalk, MFC)
56
MVC (ii)
Problema
Propensin que tienen las interfaces de usuario para cambiar, al extender la funcionalidad de una aplicacin o al portarla a un entorno grfico diferente Construir un sistema flexible es caro y propenso a los errores si la interfaz de usuario est altamente entremezclada con el ncleo funcional
57
Los controladores reciben la entrada, normalmente eventos que son trasladados para servir las peticiones del modelo o de la vista
El usuario interacta con el sistema slo a travs de los controladores
58
MVC (iv)
Clase
Responsabilidades
Ofrece la funcionalidad central de la aplicacin Registrar las vistas y controladores dependientes Notificar a los componentes dependientes sobre cambio en los datos
Modelo
Colaboradores
Vista Controlador
Clase
Responsabilidades
Crear e iniciar su controlador asociado Mostrar la informacin al usuario Implementar el mtodo actualizar() Recuperar datos del modelo
Vista
Colaboradores
Controlador Modelo
59
MVC (v)
Clase
Responsabilidades
Aceptar los eventos de entrada del usuario Traducir los eventos en peticiones de servicio Implementar el mtodo actualizar() si se requiere Recuperar datos del modelo
Controlador
Colaboradores
Vista Modelo
60
MVC (vi)
Observador 1..* actualizar()
Vista
Controlador
61
Inconvenientes
Se incrementa la complejidad Nmero de actualizaciones potencialmente alto ntima conexin entre la vista y el controlador Alto acoplamiento de las vistas y los controladores con respecto al modelo Acceso ineficiente a los datos desde la vista Cambio inevitable de las vistas y controladores cuando se porte a otras plataformas
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
62
Fabrica abstracta (i) Patrn Fabrica abstracta (Abstract Factory) Patrn de creacin de objetos [Gamma et al., 1995]
Los patrones de creacin se utilizan para construir una abstraccin sobre el proceso de instanciacin, introduciendo una gran dosis de flexibilidad en todos los aspectos que involucren creacin de objetos
Tambin conocido como Kit Ofrece una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas
63
64
<<estereotipo>> Producto
65
FactoriaControles {abstracta} + CrearDispositivo(): *Dispositivo {abstracto} + CrearBoton(): *Boton {abstracto} + CrearFormulario(): *Formulario {abstracto} + ... BotnTexto BotnGrfico
Dispositivo {abstracta} FactoriaControlesGrfico + CrearDispositivo(): *Dispositivo + CrearBoton(): *Boton + CrearFormulario(): *Formulario + ... FactoriaControlesTexto + CrearDispositivo(): *Dispositivo + CrearBoton(): *Boton + CrearFormulario(): *Formulario + ... + Inicia()
DispositivoTexto
DispositivoGrfico
66
Inconveniente
El soporte de nuevos productos se complica porque afecta a la interfaz de la fbrica abstracta y por consiguiente de todas sus subclases
67
Puente (i) Patrn Puente (Bridge) Patrn estructural [Gamma et al., 1995]
Los patrones estructurales expresan cmo las clases y objetos se componen para formar estructuras mayores
Tambin conocido como Handle/Body o Envelope Desacopla una abstraccin de su implementacin para que ambas puedan variar independientemente
68
PilaArray
PilaLista
PilaFichero
69
70
Abstraccin Operacin( )
impl
Implementador ImpOperacin( )
impl->ImpOperacin()
AbstraccinRefinada
ImplementadorConcretoA ImplementadorConcretoB
71
Puente (v)
Puente
T T
PilaExtendida Vaciar()
ImpPilaArray
ImpPilaLista
ImpPilaFichero
72
73
Mediador (i) Patrn Mediador (Mediator) Patrn de comportamiento [Gamma et al., 1995]
Los patrones de comportamiento estn relacionados con los algoritmos y la asignacin de responsabilidades. No describen tan slo patrones de objetos y clases, sino patrones de comunicacin entre ellos
Su objetivo es definir un objeto que encapsule como interactan un conjunto de objetos, evitando que tengan que conocerse entre ellos y permitiendo cambiar la interaccin de forma independiente
74
A E D
B C E
A
Mediator
B C
75
76
77
Mediador
mediador
Colega
MediadorConcreto
ColegaConcreto1
ColegaConcreto2
78
Mediador (vi)
Control Cambiado( )
mediador->CambioEnControl (this)
lista
DilogoAbrirArchivo
Lista GetSeleccin():Cadena
79
Mediador (vii)
unCliente unDilogoAbrirArchivo unaLista unVisor
SetImagen(img)
80
Desacopla colegas, permitiendo que cambien independientemente Simplifica los protocolos de los objetos, al cambiar las asociaciones m:n por 1:n, ms sencillas de entender, mantener y ampliar Abstrae la cooperacin entre los objetos y la encapsula en el mediador, siendo ms fcil entender cmo funciona el sistema
Inconveniente
Centraliza el control en el mediador, que es un objeto complejo y difcil de entender
81
Experto en informacin (i) Patrn GRASP [Larman, 2002] Clasificado como aspecto fundamental de diseo Problema
Cul es un principio general para asignar responsabilidades a los objetos?
Un modelo de diseo puede definir numerosas clases y una aplicacin puede requerir que se realicen numerosas responsabilidades Durante el diseo de objetos, cuando se definen las interacciones entre los objetos, se toman decisiones sobre la asignacin de responsabilidades a las clases
Si esta asignacin se hace bien, los sistemas tienden a ser ms fciles de entender, mantener y amplia, existiendo ms oportunidades para reutilizar componentes en futuras aplicaciones
Solucin
Universidad de Salamanca Departamento de Informtica y Automtica
Asignar una responsabilidad al experto en informacin, esto es, la clase que tiene la informacin necesaria para realizar la responsabilidad
Dr. Francisco J. Garca Pealvo
82
t:=getTotal()
1 *: st:=getSubtotal()
:Venta
:LneaVenta
:Producto
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
1.1 p:=getPrecio()
83
Beneficios
Se mantiene el encapsulamiento de la informacin Se distribuye el comportamiento entre las clases que contienen la informacin requerida Bajo acoplamiento Alta cohesin
84
Creador (i)
Patrn GRASP [Larman, 2002] Clasificado como aspecto fundamental de diseo Problema
Quin debera ser el responsable de la creacin de una nueva instancia de alguna clase?
La creacin de instancias es una de las actividades ms comunes en un sistema orientado a objetos Es til contar con un principio general para la asignacin de las responsabilidades de creacin
Si se asignan bien, el diseo puede soportar un bajo acoplamiento, mayor claridad, encapsulacin y reutilizacin
Solucin
Asignar a la clase B la responsabilidad de crear una instancia de la clase A si se cumple uno o ms de los siguientes casos, donde B sera un creador de objetos de A
B agrega objetos de A B contiene objetos de A B registra objetos de A B utiliza ms estrechamente objetos de A B tiene los datos de inicializacin que se pasarn a un objeto A cuando sea creado (B es un Experto con respecto a la creacin de A)
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
85
Creador (ii)
Venta -fecha -hora
86
Beneficios
Bajo acoplamiento
87
Solucin
Asignar una responsabilidad de manera que el acoplamiento permanezca bajo
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
88
Debe crearse una instancia de Pago y asociarla con Venta, qu clase debera ser la responsable?
Opcin 1
realizarPago() :Registro
1:create()
realizarPago()
Opcin 2
1:create()
p:Pago
:Registro
2: aadirPago(p)
:Venta
89
Beneficios
No afectan los cambios en otros componentes Fcil de entender de manera aislada Conveniente para reutilizar
90
Un elemento con responsabilidades altamente relacionadas, y que no hace una gran cantidad de trabajo, tiene alta cohesin Una clase con baja cohesin hace muchas cosas no relacionadas, o hace demasiado trabajo. Tales clases no son convenientes y adolecen de los siguientes problemas
Difciles de entender Difciles de reutilizar Difciles de mantener Delicadas, constantemente afectadas por los cambios
Solucin
Con frecuencia las clases con baja cohesin representa un grano grande de abstraccin, o se les ha asignado responsabilidad que deberan haberse delegado en otros objetos
91
Beneficios
Se incrementa la claridad y facilita la comprensin del diseo Se simplifican el mantenimiento y las mejoras Se soporta a menudo bajo acoplamiento El grano fino de funcionalidad altamente relacionada incrementa la reutilizacin porque una clase cohesiva se puede utilizar para un propsito muy especfico
Dr. Francisco J. Garca Pealvo
92
Controlador (i) Patrn GRASP [Larman, 2002] Clasificado como aspecto fundamental de diseo Problema
Quin debe ser el responsable de gestionar un evento de entrada al sistema?
Un evento de entrada es un evento generado por un actor externo
Se asocian con operaciones del sistema tal como se relacionan los mensajes y los mtodos
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 el mtodo para la operacin del sistema
93
Ntese que la clases Ventana, Applet, Widget, Vista o Documento no estn en esta lista. Tales clases no deberan abordar tareas relacionadas con los eventos del sistema, normalmente, reciben estos eventos y los delegan a un controlador
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
94
Controlador (iii)
actionPerformed(actionEvent) :JFrameVenta
1 : introducirProducto(productoID, cantidad)
:Registro
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
:Venta
95
96
Polimorfismo (i)
Patrn GRASP [Larman, 2002] Clasificado como aspecto fundamental de diseo Problemas
Cmo manejar las alternativas basadas en el tipo?
La variacin condicional es fundamental en el desarrollo de software Si se disea una programa utilizando sentencias de la lgica condicional, en el momento que aparezca una nueva variacin, se requerirn modificaciones en la lgica de los casos Esto dificulta que el software se extienda con facilidad como nuevas variaciones porque se tiende a necesitar cambios en varios sitios
Solucin
Cuando las alternativas o comportamientos relacionados varan segn el tipo (clase) se debe asignar la responsabilidad para el comportamiento (utilizando operaciones polimrficas) a los tipos para los que vara el comportamiento No deben hacerse comprobaciones acerca del tipo del objeto y no debe utilizarse la lgica condicional para llevar a cabo alternativas diferentes basadas en el tipo
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
97
Polimorfismo (ii)
98
Beneficios
Se aaden fcilmente las extensiones necesarias para nuevas variaciones Las nuevas implementaciones se pueden introducir sin afectar a los clientes
99
Solucin
Asignar un conjunto de responsabilidades altamente cohesivo a una clase artificial o de conveniencia que no representa un concepto del dominio del problema
Algo inventado para soportar alta cohesin, bajo acoplamiento y reutilizacin
Esta clase es una fabricacin de la imaginacin Idealmente las responsabilidades asignadas a esta fabricacin soportan alta cohesin y bajo acoplamiento, de manera que el diseo de la fabricacin es muy limpio o puro
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
100
Beneficios
Se soporta Alta cohesin puesto que las responsabilidades se factorizan en una clase de grano fino que slo se centra en un conjunto muy especfico de tareas relacionadas El potencial para reutilizar puede aumentar debido a la presencia de clases de Fabricacin pura de grano fino, cuyas responsabilidades tienen aplicacin en otras aplicaciones
101
Indireccin (i) Patrn GRASP [Larman, 2002] Clasificado como aspecto avanzado de diseo Problemas
Dnde asignar una responsabilidad para evitar el acoplamiento directo entre dos (o ms) clases? Cmo desacoplar los objetos de manera que se soporte el bajo acoplamiento y el potencial para reutilizar permanezca alto?
Solucin
Asignar responsabilidades a un objeto intermedio que medie entre otros componentes o servicios de manera que no se acoplen directamente El intermediario crea una indireccin entre los otros componentes
Beneficio
Disminuir el acoplamiento entre los componentes
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
102
Indireccin (ii)
v : Venta :AdaptadorMasterImpuestos Comunicacin va Java RMI t:=getTotal() impuestos := getImpuestos(v) calculaImpuestos()
<<system>> : MasterImpuestos
103
Variaciones protegidas (i) Patrn GRASP [Larman, 2002] Clasificado como aspecto avanzado de diseo Problema
Cmo disear objetos, subsistemas y sistemas de manera que las variaciones o inestabilidades en estos elementos no tengan un impacto no deseable en otros elementos?
Solucin
Identificar los puntos de variacin previstos o de inestabilidad Asignar responsabilidades para crear una interfaz estable alrededor de ellos
104
Beneficios
Se aaden fcilmente las extensiones que se necesitan para nuevas variaciones Se pueden introducir nuevas implementaciones sin afectar a los clientes Se reduce el acoplamiento Puede disminuirse el impacto o el coste de los cambios
105
Contexto
El acceso a los datos vara dependiendo de la fuente de los datos El acceso al almacenamiento persistente, como una base de datos, vara en gran medida dependiendo del tipo de almacenamiento (bases de datos relacionales, bases de datos orientadas a objetos, ficheros planos...) y de la implementacin del vendedor
Aplicabilidad
Desacoplar la lgica de negocio de la lgica de acceso a datos, de manera que se pueda cambiar la fuente de datos fcilmente Poder seleccionar el tipo de fuente de datos durante la instalacin/configuracin de una aplicacin
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
106
Otras aplicaciones podran necesitar acceder a datos que residen en sistemas diferentes
Por ejemplo, los datos podran residir en sistemas mainframe, repositorios LDAP (Lightweight Directory Access Protocol )...
Otro ejemplo es donde los datos los proporcionan servicios a travs de sistemas externos como los sistemas de integracin negocio-a-negocio (B2B), servicios de tarjetas de crdito...
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
107
108
109
Los componentes normalmente utilizan APIs propietarias para acceder a sistemas externos y/o legados para recuperar y almacenar datos La portabilidad de los componentes se ve afectada directamente cuando se incluyen APIs y mecanismos de acceso especficos Los componentes necesitan ser transparentes al almacenamiento persistente real o la implementacin de la fuente de datos para proporcionar una migracin sencilla a diferentes productos, diferentes tipos de almacenamiento y diferentes tipos de fuentes de datos
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
110
111
112
113
114
FactoriaSgbdDAO
crea
crea
SgbdDAO1
SgbdDAO2
interfaz DAO1
interfaz DAO2
115
116
117
118
Riesgos
Ms complejidad
119
120
Aportaciones principales
Los objetos de un diseo orientado a objetos estn relacionados con la solucin del problema a resolver Los objetos del dominio de la solucin incluyen: objetos de interfaz, objetos de aplicacin y objetos base o de utilidad
stos no forman parte directamente de los objetos del dominio problema, pero representan la vista del usuario de los objetos semnticos
La experiencia en OO se acumula en un repertorio tanto de principios generales como de soluciones basadas en aplicar ciertos estilos en la creacin de software
Estos principios y estilos cuando se codifican con un formato estructurado, que describe el problema y la solucin, y se le asigna un nombre, se denominan patrones
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
121
6. Cuestiones y ejercicios
122
Cuestiones y ejercicios
Leer y estudiar los patrones que se recogen en [Gamma et al., 1995] En qu se diferencian el diseo orientado a objetos y el diseo estructurado? Refinar los modelos de anlisis construidos en los ejercicios del tema 4
123
7. Lecturas complementarias
124
Lecturas complementarias
Ambler, S. W. The Design of a Robust Persistence Layer for Relational Databases. White paper. Ronin International. http://www.ambysoft.com/persistenceLayer.pdf. November 2000
Se presenta el diseo de una capa de persistencia para aplicaciones orientadas a objetos
Buschmann, F., Meunier, R., Rohnert, H., Sommerlad, P., Stal, M. Pattern Oriented Software Architecture: A System of Patterns. John Wiley & Sons, 1996
Libro imprescindible para profundizar en los patrones de diseo
Ministerio de Administraciones Pblicas. MTRICA 3.0, Volmenes 1-3. Ministerio de Administraciones Pblicas, 2001
Es interesante destacar la parte de diseo orientado a objetos de esta metodologa
Shaw, M., Garlan, D. Software Architecture: Perspectives on an Emerging Discipline. Prentice-Hall, 1996
Libro dedicado a las arquitecturas software
125
8. Referencias
126
Referencias (i)
[Aklecha, 1999] Aklecha, V. Object-Oriented Frameworks Using C++ and CORBA Gold Book. Coriolis Technology Press, 1999 [Alexander, 1979] Alexander, C. The Timeless Way of Building. The Oxford University Press, 1979 [Appleton, 2000] Appleton, B. Patterns and Software: Essential Concepts and Terminology. http://www.cmcrossroads.com/bradapp/docs/patterns-intro.html [ltima vez visitado, 1-12-2005]. February 2000 [Booch, 1994] Booch, G. Object Oriented Analysis and Design with Applications. 2nd Edition. The Benjamin/Cummings Publishing Company, 1994 [Buschmann et al., 1996] Buschmann, F., Meunier, R., Rohnert, H., Sommerlad, P., Stal, M. Pattern Oriented Software Architecture: A System of Patterns. John Wiley & Sons, 1996 [Coplien, 2003] Coplien, J. O. A Pattern Definition - Software Patterns. http://hillside.net/patterns/definition.html [ltima vez visitado, 1-12-2005]. 2003 [Fowler, 1996] Fowler, M. Analysis Patterns: Reusable Object Models. Object Technology Series. Addison-Wesley, 1996 [Gamma et al., 1995] Gamma, E., Helm, R., Johnson, R., Vlissides, J. Design Patterns. Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
127
Referencias (ii)
[Jacobson et al., 1997] Jacobson, I., Griss, M., Jonsson, P. Software Reuse: Architecture, Process and Organization for Business Success. Addison-Wesley, 1997 [Jacobson et al., 1999] Jacobson, I., Booch, G., Rumbaugh, J. The Unified Software Development Process. Object Technology Series. Addison-Wesley, 1999 [Larman, 2002] Larman, C. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process. 2nd Ed. Prentice Hall, 2002 [Monarchi y Puhr, 1992] Monarchi, D. E., Puhr, G. I. A Research Typology for ObjectOriented Analysis and Design. Communications of the ACM, 35(9):35-47. September 1992 [OMG, 2003] OMG. OMG Unified Modeling Language Specification. Version 1.5. Object Management Group Inc. Document formal/03-03-01. March 2003. http://www.omg.org/docs/formal/03-03-01.pdf [ltima vez visitado, 1-12-2005] [Reenskaug et al., 1996] Reenskaug, T., Wold, P., Lehne, O. A. Working with Objects. The OOram Software Engineering Method. Manning Publications Co./Prentice Hall, 1996 [Shaw y Garlan, 1996] Shaw, M., Garlan, D. Software Architecture: Perspectives on an Emerging Discipline. Prentice-Hall, 1996 [Sommerville, 2002] Sommerville, I. Ingeniera del Software. 6 Edicin, Addison-Wesley. 2002 [Sun, 2002] Sun Microsystems. Core J2EE Patterns - Data Access Object. Sun Developer Network, 2002. http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html. [ltima vez visitado, 6-12-2005]
Universidad de Salamanca Departamento de Informtica y Automtica Dr. Francisco J. Garca Pealvo
128