Curso UML
🧠 ¿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.
🧩 Partes de un Diagrama de Estados
1. 🔵 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
2. ⚫ 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
3. ⭕ 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
4. ➡️ 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
5. 🧪 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
6. ⚙️ 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
🌐 Ejemplo completo: Diagrama de una puerta automática
📌 PlantUML
1@startuml 2[*] --> Cerrada 3 4Cerrada : entry / mostrar("Puerta cerrada") 5Cerrada --> Abierta : detectaMovimiento() / abrir() 6 7Abierta : entry / mostrar("Puerta abierta") 8Abierta --> Cerrada : tiempoInactivo() / cerrar() 9 10Abierta --> [*] 11@enduml
✅ 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.
🎓 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