Archyno
UMLDiagramas de comportamiento

Ejemplos de diagramas de secuencia UML

Tres flujos, cada uno necesita algo que los otros no: un inicio de sesión que se ramifica, un pago que reintenta y un evento al que nadie responde.

6 min de lecturaUML 2.5.19 de 35

La respuesta corta

  • El inicio de sesión es el ejemplo estándar porque se ramifica, y ramificar es lo que sabe hacer un diagrama de secuencia y no una lista numerada.
  • Mete también la respuesta fallida dentro del fragmento loop. Un bucle que solo contiene la petición esconde el motivo del reintento.
  • Un mensaje asíncrono es una línea sólida con punta abierta y sin respuesta. La flecha de retorno ausente es la afirmación, no un olvido.
  • Tres formas cubren casi cualquier flujo real: una ramificación, un bucle de reintento y un mensaje al que nadie responde.
Un diagrama de secuencia UML de un inicio de sesión. Un usuario envía sus credenciales a una página de acceso, que pide a un servicio de identidad que las autentique. En la rama de éxito el servicio emite un token y la página redirige al panel; en la rama de fallo registra el intento y la página muestra un error.
Un inicio de sesión. El fragmento alt lleva los dos desenlaces, y la rama de fallo hace trabajo propio.

01Un inicio de sesión, donde la rama es el asunto#

Lee el diagrama de arriba como dos historias que comparten un principio. Todo lo que está por encima del marco alt ocurre en cualquier caso; dentro se ejecuta exactamente un compartimento, y las guardas entre corchetes dicen cuál. Eso es lo que un diagrama de secuencia hace y una lista numerada de pasos no puede, y por eso este flujo es el primer ejemplo estándar.

El detalle que merece copiarse está en la rama de fallo. No se limita a devolver un error: primero dispara record(failure)al registro de intentos, dibujado con punta abierta porque nada lo espera. Un diagrama cuya ruta de fallo es una sola flecha etiquetada "error" es un diagrama que no ha pensado en la ruta de fallo, y el requisito de limitación que todo el mundo descubre tres semanas después vive justo en esa rama.

02Un pago, donde el bucle y la autollamada son el asunto#

Un diagrama de secuencia UML de un pago con reintentos. Un servicio de pago en caja llama a una pasarela de pago hasta tres veces mientras la respuesta sea un fallo transitorio, calcula una espera entre intentos y luego escribe el resultado en un almacén de pedidos.
Un reintento. La respuesta fallida está dentro del bucle, porque es la razón de que el bucle exista.

Dos cosas de aquí no aparecen en un primer diagrama de secuencia. La guarda del fragmento loop nombra a la vez un límite y una condición - [3 times, while transient] - porque un bucle sin límite es un diagrama que promete una caída, y uno sin condición no dice qué lo detiene antes.

La otra es backoff(), un mensaje de Checkout a sí mismo, dibujado como una flecha que sale de una línea de vida y vuelve a ella. Las autollamadas merecen dibujarse justo cuando la espera o la decisión forma parte de la historia - aquí es toda la razón de que el segundo intento tenga éxito - y merecen omitirse cuando son trabajo interno corriente.

Fíjate también en lo que no hay: ninguna respuesta discontinua tras markPaid(orderId). El almacén de pedidos responde, claro, pero la respuesta no lleva nada sobre lo que este flujo razone, y dibujar todas las respuestas es como un diagrama de seis mensajes interesantes se convierte en uno de doce.

03Un evento, donde no se responde a nada#

Un diagrama de secuencia UML de una publicación de evento. Un servicio de pedidos publica un evento OrderPlaced en un broker, que lo entrega de forma asíncrona a un servicio de almacén y a un servicio de correo. Ningún mensaje recibe respuesta.
Una publicación. Tres puntas abiertas, ninguna respuesta, y ninguna afirmación sobre quién se ejecuta primero.

Este es el ejemplo que casi nadie dibuja, y el que más merece la pena tener. Todas las flechas son asíncronas - línea sólida, punta abierta - y no hay un solo retorno discontinuo. El servicio de pedidos publica y sigue; el almacén y el servicio de correo reciben cada uno el evento, y nada en este diagrama dice cuál de los dos termina primero, porque tampoco lo dice nada en el sistema.

Dibujar este flujo con puntas rellenas y respuestas sería otro sistema: uno donde publicar bloquea hasta que ambos consumidores han corrido, que es precisamente la propiedad que un broker existe para eliminar. La notación los distingue, y esa distinción vale más aquí que en ningún otro sitio de UML.

En una línea cada uno

  1. 01Un fragmento alt lleva todos los desenlaces; si solo una rama tiene guarda, querías un opt.
  2. 02Dale al bucle un límite y una condición, y deja dentro la respuesta fallida.
  3. 03Punta abierta y ninguna respuesta significan asíncrono. No dibujes un retorno que no ocurrió.
  4. 04Dibuja una autollamada cuando la espera o la decisión sea parte de la historia, no para trabajo interno corriente.
  5. 05Omite las respuestas que no llevan nada sobre lo que el flujo razone.

Para el método en vez de los ejemplos, lee cómo dibujar un diagrama de secuencia; para la notación completa, el artículo del diagrama de secuencia.

04Preguntas frecuentes#

¿Cuál es un buen ejemplo de diagrama de secuencia UML?

El inicio de sesión es el ejemplo estándar porque se ramifica, y ramificar es precisamente lo que un diagrama de secuencia sabe hacer y una lista numerada no. Además merece la pena dibujar un reintento y una publicación asíncrona, porque juntos cubren las tres formas de las que se compone casi cualquier flujo real.

¿Cómo muestro un reintento en un diagrama de secuencia?

Con un fragmento loop alrededor de los mensajes que se repiten y una guarda que nombre el número y la condición, por ejemplo tres veces, mientras sea transitorio. Dibuja también la respuesta fallida dentro del bucle: un bucle que solo contiene la petición esconde el motivo del reintento.

¿Cómo se dibuja un mensaje asíncrono?

Como una línea sólida con punta abierta, en lugar de la punta rellena que lleva una llamada síncrona, y sin flecha de retorno después. La ausencia de respuesta es justo el punto: quien envió no esperó, y una flecha de retorno discontinua afirmaría lo contrario.

En esta serie

Lecturas relacionadas

Todos los artículos