Saltar la navegación

3.1.1.- Representación de objetos, línea de vida y paso de mensajes.

Caso práctico

Primer plano de una chica joven, de espresión seria, con el pelo largo y rizado, viste con una camisa de color gris.

Ada, orienta a su equipo:

-Bien, ¿qué nos haría falta para poder representar la interacción de los objetos que participan en el caso de uso a lo largo del tiempo?

-Alguna manera de representar los objetos, el paso del tiempo y el paso de mensajes ¿no?

Representación de objetos y linea de vida.

En un diagrama de secuencia, los objetos se dibujan mediante rectángulos y se distribuyen horizontalmente en la parte superior del diagrama. Por cada objeto se identifica su nombre, seguido del símbolo de dos puntos y a continuación el nombre de la clase a la que pertenece. Si no se indica el nombre del objeto, se considera que para el propósito del diagrama es válido cualquier objeto de la clase.

Objetos de un diagrama de secuencia. En la zona superior hay un rectángulo verde con el nombre del objeto: Objeto_1 de la Clase_1 y debajo Cualquier objeto de la Clase_2. En la zona inferior aparecen dos rectángulos naranjas con los nombres: Objeto_1:Clase_1 en uno y :Clase_2 en otro. De cada objeto parte una línea de puntos hacia abajo.

De cada rectángulo sale una línea punteada que representa el paso del tiempo, se denomina línea de vida. La línea de vida se prolonga mientras el objeto es relevante en el diagrama, una vez deja de serlo se indica mediante una cruz "X", dejando por tanto de existir a partir de ese momento.

Cuando el objeto toma protagonismo en el intercambio de mensajes, se dice que está activo y se indica mediante un recuadro sobre su línea de vida.

Objetos de un diagrama de secuencia. En la zona superior hay un rectángulo verde con el nombre del objeto: *Tiempos de activación y *Finalización del objeto. En la zona inferior aparecen dos rectángulos naranjas con los nombres: Objeto_1:Clase_1 en uno y :Clase_2 en otro. De cada objeto parte una línea de puntos hacia abajo con rectángulos muy finos hacia abajo a modo de columna ancha con dos aspas al final de las líneas de puntos.

Una línea de vida puede estar encabezada por otro tipo de instancias como el sistema o un actor que aparecerán con su propio nombre. Usaremos el sistema para representar solicitudes al mismo, como por ejemplo pulsar un botón para abrir una ventana o una llamada a una subrutina

Paso de mensajes (Invocación de métodos).

Los mensajes, que significan la invocación de métodos, se representan como flechas horizontales que van de una línea de vida a otra, indicando con la flecha la dirección del mensaje. Los mensajes se dibujan desde el objeto que envía el mensaje al que lo recibe, pudiendo ser el mismo objeto emisor y receptor de un mensaje. El orden en el tiempo viene determinado por su posición vertical, un mensaje que se dibuja debajo de otro indica que se envía después, por lo que no se hace necesario un número de secuencia. Los mensajes tendrán un nombre y pueden incluir argumentos de entrada, valores devueltos e información de control (condición o iteración).

Objetos de un diagrama de secuencia. En la zona superior hay un rectángulo verde con el nombre del objeto: Ejemplos de métodos con/sin parámetros de entrada y valores devueltos. En la zona inferior aparecen dos rectángulos naranjas con los nombres: Objeto_1:Clase_1 en uno y :Clase_2 en otro.De cada objeto parte una línea de puntos hacia abajo con rectángulos muy finos hacia abajo a modo de columna ancha con dos aspas al final de las líneas de puntos. De los rectángulos sale una flecha de Objeto_1:Clase_1  a :Clase_2 con el rótulo val_ret=nombre_metiparam_lnl. Por otro lado, de :Clase_2 sale una flecha hacia Objeto_1:Clase_1 con el rótulo nombre_met2().

Una notación alternativa para recoger valores devueltos por los métodos es dibujar una línea de puntos finalizada en flecha, que irá desde el objeto destinatario del mensaje al que lo ha generado, acompañado del texto del valor devuelto.

Condicionales e iteraciones.

Además de presentar acciones sencillas que se ejecutan de manera secuencial también se pueden representar algunas situaciones más complejas como bucles usando marcos, normalmente se nombra el marco con el tipo de bucle a ejecutar y la condición de parada. También se pueden representar flujos de mensajes condicionales en función de un valor determinado.

En el diagrama aparecen cuatro instancias llamadas unSoci:Socio, <<system>>:sistema, miPedido:Pedido, y linea:LineaPedido, todas se forman con rectángulos azules, menos linea que se forma con dos rectángulos superpuestos. Se envían los siguientes mensajes en forma de flecha con los siguientes rótulos: de unSocio a sistema 1:iniciarPedido, un poco más abajo, de sistema a miPedido 1.1: crear. Debajo aparece un rectángulo horizontal que ocupa todo el ancho de la imagen, en la esquina superior izquierda aparece el rótulo loop y un poco más abajo entre corchetes Repetir hasta completar pedido. Los mensajes que aparecen dentro del rectángulo de loop son: de unSocio a sistema 2: cod = seleccionarArticulo() y de sistema a linea 2.1: crear(cod).

Las secuencias de control; tanto condicionales, como iterativas, se pueden representar usando marcos, normalmente se nombra el marco con el tipo de bucle a ejecutar y la condición de parada. También se pueden representar flujos de mensajes condicionales en función de un valor determinado.

La expresión a evaluar para la condición o iteración se representa entre corchetes.

En la zona superior hay un rectángulo verde con el nombre del objeto: Ejemplos de maro de condición. En la zona inferior aparecen dos rectángulos naranjas con los nombres: Objeto_1:Clase_1, :Clase_2 y :Clase_3. Se envían los siguientes mensajes en forma de flecha con los siguientes rótulos: de Objeto_1:Clase_1 a: Clase_2 el rótulo val_ret=nombre_met(), un poco más abajo, de Objeto_1:Clase_1 a:Clase_3 el rótulo nombre_met2(). Debajo aparece un rectángulo horizontal que ocupa solamente el rótulo que va desde Objeto_1:Clase_1 a :Clase_3, en la esquina superior izquierda aparece el rótulo optional y un poco más abajo entre corchetes val_ret = true. De cada objeto parte una línea de puntos hacia abajo con rectángulos muy finos hacia abajo a modo de columna ancha con dos aspas al final de las líneas de puntos.

Combinando varios marcos opcionales es posible representar diferentes alternativas en la ejecución de un diagrama de secuencia.

Para el caso de una iteración, tenemos el siguiente ejemplo.

En la zona superior hay un rectángulo verde con el nombre del objeto: Ejemplos de maro de iteración. En la zona inferior aparecen dos rectángulos naranjas con los nombres: Objeto_1:Clase_1, :Clase_2 y :Clase_3. Se envían los siguientes mensajes en forma de flecha con los siguientes rótulos: de Objeto_1:Clase_1 a:Clase_2 el rótulo val_ret=nombre_met(), un poco más abajo, de Objeto_1:Clase_1 a:Clase_3 el rótulo nombre_met2(). Debajo aparece un rectángulo horizontal que ocupa todo el ancho de la imagen, en la esquina superior izquierda aparece el rótulo loop y un poco más abajo entre corchetes val_ret!= true. De cada objeto parte una línea de puntos hacia abajo con rectángulos muy finos hacia abajo a modo de columna ancha con dos aspas al final de las líneas de puntos.

Por defecto los métodos son bloqueantes, se entiende que el proceso del diagrama de secuencia completa cada método antes de continuar con el siguiente, es una secuencia de métodos en el tiempo. Pero en ocasiones se producen situaciones en las que se desea mostrar varios procesos en paralelo (concurrencia), se puede reflejar mediante el uso de marcos con la etiqueta concurrence.

Junto a los marcos de concurrencia, se hace necesario el uso de métodos no bloqueantes (asíncronos), que permitan en paralelo activar diferentes procesos. La notación utilizada para los métodos asíncronos es una línea finalizada con media cabeza de flecha o en UMLet una línea cuya punta flecha no está rellena.

En la zona superior hay varios rectángulos naranjas con los nombres de los siguientes objetos: :Responsable, Uno:Puerta y Dos:Puerta. Debajo aparece un rectángulo verde claro horizontal que ocupa todo el ancho de la imagen, en la zona superior izquierda aparece la etiqueta Concurrence y de la que sale dos rótulos: de :Responsable a Uno:Puerta OkUno = apertura() y de :Responsable a Dos:Puerta OkDos = apertura(). Además, hay dos bandas de color verde oscuro dentro del rectángulo verde claro. En la banda superior, en la zona superior izquierda aparece la etiqueta Optional y aparece el rótulo cierre() que va desde  :Responsable a Uno:Puerta.  En la banda inferior, en la zona superior izquierda aparece la etiqueta Optional y aparece el rótulo activarAcceso() que va desde  :Responsable a Dos:Puerta.  Por último, debajo del rectángulo verde claro, hay un recuadro gris en el que pone el siguiente mensaje: Observa como los métodos apertura no son bloqueantes.

Por último destacar que se puede completar el diagrama añadiendo etiquetas y notas en el margen izquierdo que aclare la operación que se está realizando.

Autoevaluación

Pregunta

¿Cual de estos elementos no forma parte de un diagrama de secuencia?

Respuestas

Actor.

Objeto.

Bucle.

Evento.

Retroalimentación