18. Diagramas de estados: ciclo de vida de objetos importantes

18.1 Introducción

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.

18.2 Qué representa un diagrama de estados

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.

Un diagrama de estados responde: qué estados puede tener un objeto y cómo cambia de un estado a otro.

18.3 Ciclo de vida de un objeto

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.

Diagrama de estados UML con estado inicial, estados, transiciones y estado final

18.4 Estado

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.

18.5 Estado inicial

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.

18.6 Estado final

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.

18.7 Transición

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.

18.8 Evento

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.

18.9 Guardas

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.

18.10 Acciones en transiciones

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

18.11 Acciones de entrada y salida

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.

18.12 Cuándo usar diagramas de estados

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.

18.13 Diferencia con un diagrama de actividades

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?

18.14 Ejemplo: pedido

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.

18.15 Ejemplo: turno médico

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.

18.16 Estados inválidos o transiciones prohibidas

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.

18.17 Relación con pruebas

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.

18.18 Criterios de revisión

  • ¿El objeto modelado tiene un ciclo de vida relevante?
  • ¿Los estados son situaciones reconocibles y significativas?
  • ¿Las transiciones representan cambios válidos?
  • ¿Los eventos están nombrados con claridad?
  • ¿Las guardas expresan condiciones necesarias?
  • ¿Se omiten transiciones prohibidas o inválidas?
  • ¿El diagrama ayuda a entender reglas de comportamiento?

18.19 Errores frecuentes

  • Usar estados para representar acciones en lugar de situaciones.
  • Confundir un flujo de proceso con un ciclo de vida de objeto.
  • Agregar transiciones sin evento o condición clara.
  • Permitir cambios de estado que contradicen reglas del negocio.
  • Modelar estados demasiado pequeños o irrelevantes.
  • Olvidar estados finales o estados de cancelación cuando son importantes.
  • Crear un diagrama de estados para una clase que no lo necesita.

18.20 Qué debes recordar de este tema

  • El diagrama de estados representa el ciclo de vida de un objeto importante.
  • Un estado describe una situación estable o reconocible del objeto.
  • Una transición indica un cambio de estado.
  • Los eventos disparan transiciones.
  • Las guardas condicionan si una transición puede ocurrir.
  • Este diagrama ayuda a validar reglas y diseñar pruebas.

18.21 Conclusión

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.