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:

cerrada
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.
cerrada
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.
abierta
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:

cerrada abierta
1@startuml
2Cerrada --> Abierta : detectaMovimiento() / abrirPuerta()
3@enduml

5. 🧪 Estado Compuesto

Un estado compuesto contiene otros subestados. Se usa para modelar estados complejos.

encendida
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.
esperando
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

puerta
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, exit y do cuando 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:

boton
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