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