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.
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.
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.
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
- 01Las etiquetas de las transiciones son el contenido. Flechas sin etiqueta entre estados no dicen nada.
- 02Varios estados finales son normales: cancelado y entregado son ambos terminales y no son lo mismo.
- 03Las flechas que faltan son donde están los fallos. Comprueba cada par que no hayas dibujado.
- 04Dos flechas saliendo de un estado son dos disparadores, no dos ramas. Nada necesita un [else].
- 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
- 01¿Qué es UML?
- 02Símbolos UML
- 03Elegir un diagrama
- 04Diagramas de clases
- 05Ejemplos de diagramas de clases
- 06Cómo dibujar un diagrama de clases
- 07Símbolos del diagrama de clases
- 08Diagramas de secuencia
- 09Ejemplos de diagramas de secuencia
- 10Cómo dibujar un diagrama de secuencia
- 11Diagramas de casos de uso
- 12Ejemplos de casos de uso
- 13Diagramas de actividad
- 14Ejemplos de actividad
- 15Diagramas de máquina de estados
- 16Ejemplos de máquina de estados
- 17Diagramas de componentes
- 18Ejemplos de componentes
- 19Dibujar un diagrama de componentes
- 20Símbolos de componentes
- 21Diagramas de despliegue
- 22Ejemplos de despliegue
- 23Diagramas de objetos
- 24Diagramas de paquetes
- 25Diagramas de estructura compuesta
- 26Diagramas de comunicación
- 27Secuencia vs comunicación
- 28Diagramas de tiempos
- 29Diagramas de visión general de interacción
- 30Diagramas de perfil
- 31UML con IA
- 32Ejemplo de e-commerce
- 33Ejemplo bancario
- 34Ejemplo de microservicios
- 35Ejemplo de AWS
Lecturas relacionadas
Diagramas de comportamiento
Diagramas de comportamiento
Fundamentos
Diagramas de estructura
Diagramas de estructura
Diagramas de estructura