El diagrama de estados, también llamado diagrama de máquina de estados, permite representar el ciclo de vida de un objeto importante. Muestra los estados por los que puede pasar, los eventos que provocan cambios y las transiciones válidas entre esos estados.
Este diagrama es útil cuando el comportamiento de un objeto depende de su estado actual. Por ejemplo, un pedido no se comporta igual si está pendiente, pagado, enviado, entregado o cancelado. Un turno no se comporta igual si está disponible, reservado, confirmado, atendido o cancelado.
Un diagrama de estados representa cómo cambia un objeto a lo largo del tiempo. No muestra todos los objetos del sistema, sino el ciclo de vida de uno en particular o de una entidad especialmente relevante.
El foco está en responder preguntas como: en qué estados puede estar el objeto, qué eventos producen cambios, qué transiciones están permitidas, qué acciones ocurren al entrar o salir de un estado y qué situaciones son inválidas.
El ciclo de vida de un objeto comienza en un estado inicial, avanza por distintos estados según eventos o condiciones, y puede terminar en uno o varios estados finales. Las transiciones indican qué cambios son posibles y bajo qué circunstancias ocurren.
Un estado representa una situación estable o reconocible de un objeto durante un período. En ese estado, el objeto cumple ciertas condiciones y puede responder de determinada manera ante eventos.
Por ejemplo, un Turno puede estar en estado Disponible, Reservado, Confirmado, Atendido o Cancelado. Cada estado limita qué acciones tienen sentido. No debería atenderse un turno que está cancelado, ni cancelarse uno que ya fue atendido si la regla del negocio lo impide.
El estado inicial indica el comienzo del ciclo de vida representado. Se dibuja como un círculo negro. Desde allí suele salir una transición hacia el primer estado real del objeto.
El estado inicial no describe una situación del objeto en sí misma. Es un punto de partida del modelo.
El estado final indica que el ciclo de vida representado ha terminado. Se dibuja como un círculo negro dentro de otro círculo. No todos los diagramas necesitan un estado final, especialmente si el objeto puede permanecer activo indefinidamente.
Por ejemplo, un Pedido puede finalizar como Entregado o Cancelado, según las reglas del sistema. En otros casos, puede no interesar representar un final definitivo.
Una transición es el cambio de un estado a otro. Se representa con una flecha. Indica que, cuando ocurre cierto evento o se cumple cierta condición, el objeto puede pasar desde el estado origen al estado destino.
Por ejemplo, un Turno puede pasar de Disponible a Reservado cuando ocurre el evento reservar. Puede pasar de Reservado a Cancelado cuando ocurre cancelar. Cada transición debe tener sentido dentro de las reglas del dominio.
Un evento es algo que ocurre y puede disparar una transición. Puede ser una acción del usuario, una respuesta de otro sistema, el vencimiento de un plazo, la llegada de una fecha o una condición detectada por el sistema.
Por ejemplo: pagar, cancelar, confirmar, vencer plazo, recibir autorización, entregar pedido o cerrar sesión. Los eventos suelen escribirse junto a la transición que provocan.
Una guarda es una condición que debe cumplirse para que una transición pueda ejecutarse. Se escribe entre corchetes. Por ejemplo, [pago aprobado], [hay stock] o [antes de la fecha del turno].
La transición solo ocurre si el evento se produce y la guarda se cumple. Esto permite representar reglas que dependen de condiciones específicas.
Una transición puede incluir una acción que se ejecuta cuando ocurre el cambio de estado. Por ejemplo, al pasar de Reservado a Cancelado, el sistema puede liberar el horario y enviar una notificación.
La notación puede expresarse como evento, guarda y acción. Por ejemplo: cancelar [antes del turno] / liberarHorario().
Un estado puede tener acciones asociadas a la entrada o salida. Una acción de entrada se ejecuta cuando el objeto entra en ese estado. Una acción de salida se ejecuta cuando abandona ese estado.
Por ejemplo, al entrar en el estado Confirmado, un turno puede enviar una confirmación. Al salir del estado Reservado, puede registrar un cambio en el historial.
Conviene usar diagramas de estados cuando un objeto tiene un ciclo de vida relevante y su comportamiento depende del estado en que se encuentra. Son muy útiles para pedidos, turnos, solicitudes, pagos, reservas, sesiones, documentos, incidencias y dispositivos.
No son necesarios para todas las clases. Si una clase no cambia de estado de manera significativa o si sus estados no afectan el comportamiento, este diagrama puede no aportar valor.
El diagrama de actividades muestra un flujo de trabajo. El diagrama de estados muestra el ciclo de vida de un objeto. Aunque ambos pueden tener flechas y condiciones, responden preguntas distintas.
| Aspecto | Diagrama de actividades | Diagrama de estados |
|---|---|---|
| Foco | Proceso o flujo de trabajo. | Ciclo de vida de un objeto. |
| Elementos principales | Acciones y decisiones. | Estados y transiciones. |
| Pregunta | ¿Qué pasos sigue el proceso? | ¿En qué estados puede estar el objeto? |
Un Pedido puede comenzar como Creado. Luego puede pasar a Pendiente de pago. Si el pago se aprueba, pasa a Pagado. Luego puede pasar a Preparado, Enviado y Entregado. En distintos puntos puede cancelarse, según las reglas del negocio.
Este diagrama permite ver rápidamente qué cambios son válidos. Por ejemplo, quizá no se permita volver de Entregado a Pendiente de pago, ni cancelar un pedido que ya fue entregado.
Un Turno puede comenzar como Disponible. Cuando un paciente lo reserva, pasa a Reservado. Si el paciente confirma asistencia, puede pasar a Confirmado. Si se realiza la consulta, pasa a Atendido. Si el paciente cancela antes del horario, pasa a Cancelado.
El diagrama de estados ayuda a definir qué acciones son válidas en cada estado y qué eventos producen cambios.
Tan importante como representar lo permitido es detectar lo que no debería ocurrir. Si un objeto no puede pasar de Cancelado a Atendido, esa transición no debe aparecer. Si se necesita reactivar algo cancelado, debe existir una transición explícita y una regla que lo justifique.
El diagrama de estados ayuda a evitar comportamientos inconsistentes, especialmente en sistemas con reglas de negocio estrictas.
Los diagramas de estados son muy útiles para diseñar pruebas. Cada transición válida puede convertirse en un caso de prueba. Cada transición prohibida puede sugerir una prueba de validación o error.
Por ejemplo, se puede probar que un pedido pagado puede enviarse, que un pedido cancelado no puede enviarse y que un turno atendido no puede cancelarse.
El diagrama de estados permite comprender cómo cambia un objeto importante durante su vida dentro del sistema. Es especialmente útil cuando las reglas dependen del estado actual y cuando es necesario controlar transiciones válidas e inválidas.
En el próximo tema profundizaremos en estados, eventos, transiciones, guardas y acciones.