Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Información
Diseño de Sistemas
(3K1)
Contenidos de la Unidad 3
Diseño Orientado a Objetos I
INTRODUCCIÓN
Un sistema orientado a objetos se compone de objetos que
envían mensajes a otros objetos para que lleven a cabo
operaciones. Los Contratos nos dan una conjetura inicial
óptima sobre las Responsabilidades y las Postcondiciones de las
Operaciones. Los Diagramas de Interacción describen
gráficamente la solución, a partir de los Objetos en interacción,
para satisfacer esas Responsabilidades y Postcondiciones.
Actividades y dependencias
Los patrones (GRASP) se aplican durante la elaboración de los
Diagramas de Interacción, al asignar las responsabilidades a los objetos y
al diseñar la colaboración entre ellos.
DISEÑO DE SISTEMAS
Patrones (GRASP)
CONOCER
Estar enterado de los datos privados encapsulados.
Estar enterado de la existencia de objetos conexos.
Estar enterado de cosas que se puede derivar o calcular.
Por ejemplo, puede declararse que “una Venta es responsable de imprimirse ella
misma” (un hacer) o que “una Venta tiene la obligación de conocer su fecha” (un
conocer – que puede inferirse del Modelo Conceptual por los atributos y asociaciones).
imprimir () :Venta
:Venta 1*:[en cada] vli:=siguiente() :VLP
2: imprimir () Vli:VLP
DISEÑO DE SISTEMAS
Patrones (GRASP)
PATRONES
1. Experto
2. Creador
3. Alta Cohesión
4. Bajo Acoplamiento
5. Controlador
DISEÑO DE SISTEMAS
Patrones (GRASP)
EXPERTO
Problema
¿Cuál es el principio fundamental por el cual se asignan
responsabilidades en el Diseño Orientado a Objetos?.
Durante el DOO, cuando se definen las interacciones entre
objetos, tomamos decisiones sobre la asignación de
responsabilidades a ellos.
Si se hacen en forma adecuada, los sistemas tienden a ser más
fáciles de entender, mantener y ampliar, y podremos reutilizar
esos componentes en el futuro.
Solución
Asignar una responsabilidad al experto en información: la
clase que cuenta con la información necesaria para cumplir
la responsabilidad.
DISEÑO DE SISTEMAS
Patrones (GRASP)
Ejemplo
Venta
fecha
hora
Contiene
V
1..*
EspProducto
VLP
1 Descriptas_por 1
cantidad descripción
precio
CUP
2 : st := subtotal()
VLP
Vli:=:VLP :VLP
cantidad
EspProducto
:EspProducto
Desc
Precio
Calculo del Total de la Venta CUP
Precio()
DISEÑO DE SISTEMAS
Patrones (GRASP)
Clase Responsabilidad
Venta conoce el total de la venta
VLP conoce el subtotal de la línea de producto
EspProducto conoce el precio del producto
DISEÑO DE SISTEMAS
Patrones (GRASP)
Explicación
Solución
Asignarle a la clase B la responsabilidad de crear una instancia de
clase A en uno de los siguientes casos:
B “agrega” los objetos A.
B “contiene” los objetos A.
B “registra” las instancias de los objetos de A.
B “utiliza” específicamente los objetos A.
B “tiene los datos de inicialización” que serán transmitidos a A,
cuando este objeto sea creado.
B es un creador de los objetos de A.
Si existe mas de una opción, prefiera la clase B que “agregue o
contenga” la clase A.
DISEÑO DE SISTEMAS
Patrones (GRASP)
Ejemplo
fecha hora
Contiene V
hacerLineadeProducto(cantidad)
:Venta
Venta
Nuevo método
1: crear(cantidad)
fecha
hora
VentaLinea
: hacerLinea
deProducto deProducto()
total()
Beneficios
• Facilita un Bajo Acoplamiento, => supone menos dependencias
respecto al mantenimiento y mejores oportunidades de
reutilización.
DISEÑO DE SISTEMAS
Patrones (GRASP)
BAJO ACOPLAMIENTO:
Problema:
¿Cómo dar soporte a una dependencia escasa y a un aumento de la
reutilización?
Solución
Asignar responsabilidad para mantener bajo el acoplamiento.
Ejemplo
Pago CAJA Venta
Solución alternativa:
efectuarPago () 1: efectuarPago ()
:CAJA : Venta
1.1: crear () V
: Pago
Patrones (GRASP)
Beneficios
• Fáciles de reutilizar.
DISEÑO DE SISTEMAS
ALTA COHESIÓN Patrones (GRASP)
Problema
Solución:
efectuarPago () 1: efectuarPago
:CAJA () : Venta
1.1: Crear ()
:Pago
DISEÑO DE SISTEMAS
Patrones (GRASP)
Explicación
Grados de cohesión:
Regla Práctica
Una clase de Alta Cohesión posee un número relativamente pequeño, con una
importante funcionalidad relacionada y poco trabajo por hacer. Colabora con otros
objetos para compartir el esfuerzo si la tarea es grande.
Una clase con mucha Cohesión es útil porque es bastante fácil darle mantenimiento,
entenderla y reutilizarla.
El patrón Alta Cohesión presenta semejanzas con el mundo real. Sabemos que si
alguien asume demasiadas responsabilidades, no será eficiente (hay que delegar).
DISEÑO DE SISTEMAS
Patrones (GRASP)
Beneficios:
Problema:
Use la misma clase de controlador con todos los eventos del sistema en
el mismo Caso de Uso.
DISEÑO DE SISTEMAS
Patrones (GRASP)
Ejemplo
Sistema
TerminarVenta()
IntroducirProducto()
EfectuarPago()
DISEÑO DE SISTEMAS
Patrones (GRASP)
IntroducirProducto(CUP,cant)
: ???
Sistema TPDV
TerminarVenta() ........
IntroducirProducto()
EfectuarPago() TerminarVenta()
IntroducirProducto()
EfectuarPago()
Explicación
En DOO hay que elegir los controladores que manejen los eventos de entrada. Este
patrón ofrece una guía para tomar decisiones apropiadas. La misma clase controlador
debería utilizarse con todos los eventos de un Caso de Uso.
El controlador de fachada que representa al “sistema” global, es una clase que, para el
diseñador, representa de alguna manera al sistema entero (unidad física: TPDV,
Sistema, etc.). Son adecuados cuando el sistema sólo tiene pocos eventos o cuando es
imposible redirigir los mensajes de los eventos del sistema a otros controladores.
DISEÑO DE SISTEMAS
Patrones (GRASP)
En el “Manejador artificial de Casos de Uso”, hay un
controlador para cada Caso de Uso. No es un objeto del dominio,
sino un concepto artificial cuyo fin es dar soporte al sistema (una
fabricación pura). Por ejemplo, en el Caso de Uso
ComprarProducto habrá una clase:
ManejadordeComprarProducto.
Beneficio Principal:
Controladores Saturados:
Es una clase de controlador mal diseñada, presenta Baja Cohesión: está
dispersa y tiene demasiadas áreas de responsabilidad.
Signos de Saturación:
•Una sola clase controlador recibe todos los eventos que son
excesivos. Ejemplo: suele ocurrir con los controladores de papeles o de
fachada.
Soluciones: