Diagramas de Estados (State Machine Diagrams)
1. Qué es un Diagrama de Estados? #
Un diagrama de estados describe el comportamiento de un objeto a lo largo del tiempo en función de los eventos que experimenta. Se centra en los estados en los que puede encontrarse un objeto y las transiciones entre esos estados.
🔁 Ideal para modelar comportamientos reactivos como ascensores, puertas automáticas, reproductores de música, semáforos, etc.
2. Partes de un Diagrama de Estados #
Estado (State) #
Un estado representa una condición en la que se encuentra un objeto durante un tiempo determinado.
-
Se dibuja como un rectángulo con bordes redondeados.
-
Puede tener:
- Nombre del estado.
- Actividad de entrada:
entry / acción - Actividad de salida:
exit / acción - Actividad interna:
do / acción
Ejemplo PlantUML:
1@startuml 2state Cerrada { 3 entry / mostrarMensaje("Cerrando") 4 do / esperarEvento() 5 exit / mostrarMensaje("Saliendo del estado") 6} 7@enduml
Estado Inicial (Initial State) #
Representa el punto de inicio del objeto.
- Se dibuja como un círculo negro sólido.
- Solo debe haber uno por máquina de estados.
1@startuml 2[*] --> Cerrada 3@enduml
Estado Final (Final State) #
Indica que el objeto ha terminado su comportamiento.
- Se representa con un círculo negro con borde blanco.
1@startuml 2Abierta --> [*] 3@enduml
Transición #
Una transición conecta dos estados e indica que un objeto puede pasar de un estado a otro. Tiene la forma:
@startuml
Estado1 --> Estado2 : Evento [condición] / acción
@enduml
- Evento: lo que provoca el cambio.
- Condición (guardia): opcional. Se debe cumplir para permitir la transición.
- Acción: código o procedimiento que se ejecuta al cambiar de estado.
Ejemplo:
1@startuml 2Cerrada --> Abierta : detectaMovimiento() / abrirPuerta() 3@enduml
Estado Compuesto #
Un estado compuesto contiene otros subestados. Se usa para modelar estados complejos.
1@startuml 2state Encendida { 3 [*] --> EnEspera 4 EnEspera --> Funcionando : iniciar() 5 Funcionando --> EnEspera : pausar() 6} 7@enduml
Acciones (entry, exit, do) #
entry / acción: acción que ocurre al entrar en el estado.exit / acción: acción que ocurre al salir del estado.do / acción: acción que ocurre mientras el objeto está en el estado.
1@startuml 2state Esperando { 3 entry / mostrarPantalla("Esperando") 4 do / contarTiempo() 5 exit / limpiarPantalla() 6} 7@enduml
3. Ejemplo completo: Diagrama de una puerta automática #
PlantUML #
4. Buenas prácticas #
- Usa diagramas de estado para objetos con comportamientos dependientes del tiempo o eventos.
- Agrupa lógicamente los subestados con estados compuestos.
- No abuses de este tipo de diagrama si el objeto tiene pocos cambios de estado: puede ser innecesariamente complejo.
- Usa
entry,exitydocuando el objeto tiene lógica en cada estado.
5. Ejercicio propuesto #
Crea un diagrama de estado para una cafetera eléctrica con los siguientes estados:
- Apagada
- Encendida
- Preparando café
- Terminada
Eventos:
- pulsarBotón()
- aguaLista()
- servir()
Solución:
1@startuml 2[*] --> Apagada 3 4Apagada --> Encendida : pulsarBoton() / encender() 5Encendida --> Apagada : pulsarBoton() / apagar() 6 7Encendida --> PreparandoCafe : aguaLista() / comenzarPreparacion() 8PreparandoCafe --> Terminada : preparar() / finPreparacion() 9Terminada --> Encendida : servir() / reiniciar() 10 11@enduml
Resumen del tema
Conceptos clave #
- Modelado de sistemas reactivos: representación del ciclo de vida de un objeto o componente cuyos comportamientos varían en función de su estado interno y eventos externos.
- Estructura del estado: rectángulo redondeado que puede incluir acciones internas:
entry / acción: se ejecuta inmediatamente al ingresar al estado.do / actividad: se ejecuta continuamente mientras se permanece en el estado.exit / acción: se ejecuta justo antes de abandonar el estado.
- Sintaxis de transición: especificación formal
Evento [Condición de Guardia] / Acciónpara cambiar de un estado a otro. - Puntos de inicio y fin: delimitados por
[*]para marcar el estado inicial y la terminación del ciclo de vida. - Estados compuestos y subestados: encapsulamiento jerárquico de máquinas de estados anidadas dentro de un macroestado.
Qué debes recordar #
Usa diagramas de máquina de estados para entidades reactivas con ciclos de vida complejos (pedidos, conexiones, dispositivos), controlando transiciones mediante eventos, condiciones de guardia y acciones entry/do/exit.