Archyno
UMLDiagramas de comportamiento

Ejemplos de diagramas de máquina de estados

Tres máquinas de estados que puede copiar hoy mismo: un ciclo de vida de pedido, un flujo editorial que vuelve atrás y el fragmento que muestra por qué un estado en espera no es un estado atascado.

8 min de lecturaUML 2.5.116 de 35

La respuesta corta

  • El ciclo de vida de un pedido es el ejemplo que conviene copiar: seis estados, un disparador por transición y dos finales distintos en vez de uno.
  • Más de un estado final es normal. Cancelado y entregado están ambos terminados, y llevarlos al mismo disco con anillo oculta la diferencia.
  • Un tiempo de espera es una transición cuyo disparador es un evento temporal - after(72 horas). No hace falta guarda: el paso del tiempo dispara.
  • Un estado sin transición habilitada está inactivo, no roto. Es lo contrario del diagrama de actividad, donde un token sin salida es un atasco.
Un diagrama de máquina de estados UML para un pedido. Desde el pseudoestado inicial el pedido está en Carrito; checkout lo pasa a Realizado. Desde Realizado, pay con fondos suficientes lo pasa a Pagado, y cancel lo baja a Cancelado, que alcanza un estado final. Desde Pagado, dispatch lo baja a Enviado, deliver lo pasa a Entregado, y Entregado alcanza un segundo estado final.
El ciclo de vida de un pedido. Seis estados, un disparador por transición, y dos finales que no son el mismo final.

01Ejemplo 1: el ciclo de vida de un pedido#

Si una tabla de tu base de datos tiene una columna status, este diagrama ya está implícito en el código: solo que está escrito a lo largo de una docena de cláusulas de guarda en vez de dibujado una vez. Hacerlo explícito es el ejercicio de búsqueda de defectos más barato que ofrece una máquina de estados.

Lee las transiciones en vez de las cajas. Cada una está etiquetada con el disparador que la causa - checkout, pay, dispatch, deliver - y una lleva un efecto tras una barra: dispatch / print label. Esas etiquetas son el contenido. Un diagrama de seis cajas redondeadas con flechas sin etiqueta solo dice que las cosas cambian, cosa que ya sabía todo el mundo.

Los dos estados finales son deliberados. Cancelado y Entregado son ambos terminales y no son el mismo desenlace, y dibujar un solo disco con anillo para los dos diría que el pedido terminó sin decir cómo. Nada en UML te limita a uno.

02Ejemplo 2: un flujo que vuelve hacia atrás#

Los flujos de trabajo reales rara vez van en una sola dirección. Algo se rechaza, vuelve atrás y da otra vuelta, y en la transición hacia atrás es donde suelen vivir las reglas interesantes.

Un diagrama de máquina de estados UML para un flujo editorial. Desde el pseudoestado inicial de arriba, un artículo está en Borrador. Submit lo pasa a En revisión. Approve lo pasa a la derecha a Aprobado y luego abajo a Publicado, que alcanza el estado final. Reject baja En revisión a Rechazado, y revise lleva Rechazado de vuelta a la izquierda a Borrador.

La transición revise de Rechazado a Borradores lo que convierte esto en una máquina de estados y no en una lista de comprobación. Dice que un artículo rechazado no está terminado: vuelve a entrar en el mismo ciclo, y cualquier contador del tipo «rechazado dos veces significa escalar» cuelga de esa flecha y no de un estado.

Fíjate en que Rechazado tiene salida y Publicado no. Un estado sin transición de salida y sin estado final detrás afirma que el objeto se queda ahí para siempre, cosa que a veces es cierta y más a menudo es una omisión. Comprobar cada estado hoja por esto es una revisión de dos minutos que encuentra huecos reales.

Los nombres de los disparadores son eventos del vocabulario del dominio - submit, approve, reject, revise - no nombres de métodos. Eso mantiene el diagrama legible para los editores que son dueños del proceso, que es el público capaz de decirte que está mal.

03Ejemplo 3: dos salidas que no son una decisión#

La confusión más común cuando alguien pasa de los diagramas de actividad a las máquinas de estados es qué significan dos flechas saliendo de una caja.

Un fragmento de máquina de estados UML. El estado A la espera de pago tiene dos transiciones de salida: pay barra capture lleva a Pagado, y timeout de 72 horas lleva a Caducado. Una nota explica que son dos disparadores y no dos guardas, así que nada tiene que ser exhaustivo: el estado simplemente espera.

Estos son dos disparadores, no dos ramas de una decisión. El pedido se queda en A la espera de pago indefinidamente; adónde va lo decide el evento que llegue primero: pay o el evento temporal timeout(72h). Nada tiene que ser exhaustivo y no hay ningún [else], porque esperar es un desenlace legítimo.

Es lo contrario de un diagrama de actividad, donde un token que llega a una decisión sin guarda habilitada es un proceso detenido. Geometría de aspecto idéntico, semántica opuesta, y por eso la elección entre las dos notaciones merece hacerse a propósito y no por costumbre.

04Cuándo dibujar una siquiera#

Una máquina de estados es barata de dibujar y cara de mantener, así que la pregunta de si el objeto tiene un ciclo de vida merece hacerse antes de la primera caja.

Úsalo cuando

  • El objeto tiene un campo de estado con más de dos valores y reglas sobre los cambios legales.
  • Algunas transiciones están prohibidas y la prohibición importa: reembolsos, cancelaciones, aprobaciones.
  • Varios servicios tocan el mismo objeto y no se ponen de acuerdo en qué puede hacer después.
  • Tiempos de espera o caducidades cambian el objeto sin que nadie actúe sobre él.

Usa otra cosa cuando

  • Un proceso que cruza varios objetos y roles: eso es un diagrama de actividad.
  • Una clase cuyo estado se deriva de otros campos en vez de almacenarse.
  • La propia configuración de un motor de flujos, que ya es una máquina de estados escrita.
  • Un diagrama que cubra dos objetos. Dibuja una máquina por ciclo de vida.

Si el proceso abarca varios participantes en vez de la vida de un objeto, quieres un diagrama de actividad o, para un público de negocio, BPMN. La prueba es sencilla: si no puedes nombrar la única cosa cuyos estados son estos, no es una máquina de estados.

05Qué recordar#

En una línea cada uno

  1. 01Las etiquetas de las transiciones son el contenido. Flechas sin etiqueta entre estados no dicen nada.
  2. 02Varios estados finales son normales: cancelado y entregado son ambos terminales y no son lo mismo.
  3. 03Las flechas que faltan son donde están los fallos. Comprueba cada par que no hayas dibujado.
  4. 04Dos flechas saliendo de un estado son dos disparadores, no dos ramas. Nada necesita un [else].
  5. 05Una máquina de estados por objeto con ciclo de vida real. Un proceso que abarca roles es un diagrama de actividad.

06Preguntas frecuentes#

¿Cuál es un buen ejemplo de diagrama de máquina de estados?

El ciclo de vida de un pedido: carrito, realizado, pagado, enviado, entregado, con una rama cancelado desde realizado. Tiene seis estados, un disparador por transición y dos finales distintos, que cubre todo lo que se le suele pedir a la notación.

¿Puede un diagrama de estados tener más de un estado final?

Sí, y normalmente debería. Un pedido cancelado y uno entregado están ambos terminados pero no son el mismo resultado, y llevar los dos al mismo disco con anillo oculta la diferencia. UML no limita el número de estados finales.

¿Cómo se modela un tiempo de espera en un diagrama de estados?

Como una transición cuyo disparador es un evento temporal, escrito por ejemplo timeout(72h) o after(72 horas). Sale del estado en el que el objeto espera y apunta a lo que produce el vencimiento. No hace falta guarda: el paso del tiempo es el disparador.

¿Qué ocurre si ninguna transición de salida está habilitada?

Nada, y es lo correcto. Una máquina de estados espera en su estado actual hasta que llega un disparador, así que un estado sin transición habilitada está inactivo, no roto. Es lo contrario de un diagrama de actividad, donde un token sin salida es un proceso detenido.

¿Debe haber una máquina de estados por clase?

Como mucho una, y solo para las clases con un ciclo de vida real. Si una clase tiene una columna de estado con más de dos valores y reglas sobre qué cambio es válido, dibújela. Si el estado es derivado o se fija una sola vez, la máquina no aporta nada.

En esta serie

Lecturas relacionadas

Todos los artículos