Saltar la navegación

3.2.2.- 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.

-Y cuando enviamos un mensaje ¿cómo se representa exactamente?, ¿podemos incluir de alguna forma parámetros en los mensajes o valores devueltos? ¿Y si necesitamos indicar que el mensaje se enviará sólo si se cumple una determinada condición? ¿o que se envía dentro de un bucle?

Para que sea posible el paso de mensajes es necesario que exista una asociación entre los objetos, que se podrá mostrar mediante una línea que los una y una flecha que indique la dirección.

Al igual que sucedía en los diagramas de secuencia, es posible incluir parámetros en los mensajes, valores devueltos, mensajes enviados sólo si se cumple una determinada condición, o mensajes que se ejecutan varias veces (iteraciones).

La sintaxis de un mensaje es la siguiente:

[Secuencia] [*] [Condición] {valorDevuelto} : mensaje (argumentos de entrada)  o
[Secuencia] [*] [Condición] mensaje (argumentos de entrada) : {valorDevuelto}

Donde:
  • Secuencia: representa el nivel de anidamiento del envío del mensaje dentro de la interacción. Los mensajes se numeran para indicar el orden en el que se envían, y si es necesario se puede indicar anidamiento incluyendo subrangos.
  • *: indica que el mensaje es iterativo.
  • Condición de guarda: debe cumplirse para que el mensaje pueda ser enviado.
  • ValorDevuelto: lista de valores devueltos por el mensaje. Estos valores se pueden utilizar como parámetros de otros mensajes. Los corchetes indican que es opcional.
  • Mensaje: nombre del mensaje.
  • Argumentos: parámetros que se pasan al mensaje.

La enumeración de los mensajes se puede hacer de dos formas:

  • Numeración simple: empieza en 1, se va incrementando en 1 y no hay ningún nivel de anidamiento.
  • Numeración decimal: se muestran varios niveles de subíndices para indicar anidamiento de operaciones. Por ejemplo, 1 es el primer mensaje; 1.1 es el primer mensaje anidado en el mensaje 1, 1.2 es el segundo mensaje anidado en el mensaje 1; y así sucesivamente.
Como se ve en el ejemplo, se puede usar la misma asociación para enviar varios mensajes. Vemos que hay dos mensajes anidados, el 1.1 y el 2.1, se ha usado el nombre de los mensajes para indicar el orden real en el que se envían.
Cinco instancias de objetos en forma de rectángulo azul. De arriba a abajo vemos: el objeto :ClaseA y el objeto :ClaseB unidos por una linea, debajo de la cual vemos una flecha corta con punta gruesa de :Clasea a :ClaseB y el mensaje 1:mensaje1(p1, p2):r1. Debajo, alineados con los de arriba aparecen los objetos :ClaseC y :ClaseD, están unidos entre si por un linea con una flecha de :Clase a :ClaseD y el mensaje 2:mensaje3(p3), :ClaseC está unido con :ClaseA sin mensajes y :ClaseB está unido con :ClaseD, con una flecha de :ClaseB :ClaseD y el mensaje 1.1: mensaje2(r1) y otra fecha en dirección contraria con el mensaje 2.1:mensaje4().  :ClaseD está unido a otro objeto llamado :ClaseE, que está debajo la flecha va de :ClaseE a :ClaseD con el mensaje mensaje5():r2.

Los mensajes 1, 1.1 y 2 tienen parámetros y los mensajes 1 y 3 devuelven un resultado.

Se contempla la bifurcación en la secuencia añadiendo una condición en la sintaxis del mensaje:

[Secuencia][*][CondiciónGuarda]{valorDevuelto} : mensaje (argumentos)

Cuando tenemos una condición se repite el número de secuencia y se añaden las condiciones necesarias, como vemos en la imagen según la condición se enviará el mensaje 1 o el 2, pero no ambos, por lo que coinciden en número de secuencia.

La iteración se representa mediante un * al lado del número de secuencia, pudiendo indicarse ente corchetes la condición de parada del bucle.

Nota: VP-UML modifica el orden en el que aparecen los datos pero no su notación.

Autoevaluación

Pregunta

Dos objetos llamados :objeto1 y :objeto2 unidos por una linea recta continua con el siguiente mensaje de :objeto1 a :Objeto2 1:*[condicion]operacion(p).
Indica qué afirmación no es correcta para el siguiente diagrama:

Respuestas

El objeto ob2 es multiobjeto.

Se envía un mensaje del objeto 1 al objeto 2.

El mensaje operacion(pp) se ejecutará siempre.

La operación se puede ejecutar varias veces.

Retroalimentación