Los actores que interactúan con los casos de uso generan EVENTOS que desencadenan una actividad en el sistema.
La realización de casos de uso genera ESCENARIOS, que dependen del evento emitido por el actor.
Cada escenario se ilustra con un diagrama de interacción.
Modelo de Diseño =Diagrama de Interacción +Diagrama de Clases.
Diagrama de interacción = conjunto de objetos que colaboran entre si mediante el paso de mensajes ➔ invocación de métodos en otros objetos ➔ Clases software = atributos + métodos.
Diseño de objetos:
1º listar los eventos de entrada al sistema a partir de la descripción de los casos de uso.
2º definir un controlador que maneje cada uno de esos eventos. El controlador será un objeto software mas del diagrama de clases, no tiene porque aparecer en el modelo de dominio.
3º generar la secuencia de mensajes necesarios entre objetos del sistema para atender el evento.
Cualquier representación de datos por pantalla se ignorará por el momento ➔ separación Modelo – Vista.
Una acceso a mensajes persistentes se representa mediante acceso a multiobjetos.
(Mas información: http://www.lsi.us.es/docencia/get.php?id=906)
Responsabilidad que asigna: información que debe conocer un objeto.
1º Determinar la información a conocer.
2º Buscar los objetos responsables en el Modelo de Diseño.
3º Si no se encuentran crear nuevas clases software.
Una necesidad de información puede requerir nuevas necesidades de información ➔ nuevas responsabilidades ➔ nuevos expertos.
Por ejemplo, una Venta necesita conocer el total y para conocerlo es necesario el Subtotal de todas las LineaDeVenta. Para calcular cada Subtotal se deberá conocer la cantidad y precio del artículo. Esta última información es responsabilidad de DetallesDeArticulo.
En este ejemplo un experto partícular ha generado información esparcida por otros objetos. ➔ Iteración entre objetos.
Patrones relacionados: Bajo Acoplamiento y Alta Cohesión.
A veces la solución propuesta por el experto no satisface el bajo acoplamiento y la alta cohesión ➔ buscar alternativas de asignación de responsabiliades.
¿Quién es el responsable de crear una instancia de alguna clase?
Por ejemplo una Venta crea varias LineaDeVenta.
Si un objeto A necesita conectarse a otro B, A crea a B.
Agregado agrega partes.
Contenedor contiene Contenido.
Registro registra Registros.
Tanto Contenedor como Registro tienen la responsabilidad de crear lo que contienen o registran luego ambos deberán contener información para crear el contenido o los registros.
Si la creación sugiere usar instancias recicladas, crear una instancia condicionalmente, ... Se recomienda usar Factoria.
Los elementos deben depender poco unos de otros.
Se debe considerar junto al Experto y a la Alta cohesión.
Por ejemplo a una Venta se le debe asociar un Pago ➔ 2 posibles diseños:
A ) El Registro crea Pago y le asocia a la Venta. Venta y Pago dependen de Registro.
B ) El Registro realiza Venta y Venta crea Pago ➔ diseño mejor acoplamiento
Formas comunes de acoplamiento:
Herencia ➔ Alto acoplamiento ➔ usarla sólo cuando la superclase sea un opjeto persistente (estable en el tiempo).
Un elemento con alta cohesión es aquel cuya funcionalidad está relacionada y que no hace gran cantidad de trabajo ➔ Función bien definida.
Por ejemplo Venta pagada en efectivo. Si al Registro se le asignan operaciones no relacionadas como la paga en efectivo, la cohesión es baja. Lo ideal es Registro crea Venta y Venta se asocia a Pago.
Grados de cohesión funcional:
DISEÑO MODULAR: consiste en descomponer el sistema en módulos cohesivos y débilmente acoplados.
Baja cohesión ➔ alto acoplamiento y viceversa.
Asigna la responsabilidad de recibir o manejar un mensaje de evento del sistema a una clase controladora.
Tipos:
<NombreCasoUso>Manejador
<NombreCasoUso>Coordinador
<NombreCasoUso>Sesion
Una sesión es una conversación de duración fija con un actor.
Hay un controlador por cada caso de uso.
Un actor al interactuar con el sistema genera un evento de entrada al mismo. Esto provoca la ejecución de operaciones en el sistema asociadas al evento.
¿Quién es el responsable de gestionar el evento?
Un controlador (independiente de la interfaz de comunicación con el usuario) define una operación que maneje el evento. En el mismo controlador se deberán definir las operaciones relacionadas con el mismo tipo de evento ➔ Mayor cohesión.
Cuando el tratamiento del evento sea complejo, el controlador delega el trabajo que se necesite hacer, coordina o controla la actividad. No realiza mucho trabajo.
LAS UI NO MANEJAN EVENTOS.