Guía de sintaxis de diagramas de estado de PlantUML

¿Qué es un diagrama de estado?

Un diagrama de estado (a menudo llamado máquina de estados o diagrama de estado) es un diagrama comportamental diagrama UML que modela el ciclo de vida de un objeto del sistema, entidad empresarial o proceso en tiempo de ejecución. Como componente fundamental de la especificación del Lenguaje Unificado de Modelado (UML), este tipo específico detipo de diagrama UML ilustra los diversos estados que un objeto puede ocupar desde su instanciación inicial hasta su destrucción final, junto con los eventos o condiciones específicos que desencadenan un cambio de un estado a otro.

Ya sea que estés documentando las banderas de conexión intrincadas de una conexión WebSocket, los pasos de procesamiento de pedidos de un modelo de pago de comercio electrónico o el comportamiento de un sistema de hardware autónomo, una máquina de estados UML proporciona a los desarrolladores de software y arquitectos de software un plano claro y sin ambigüedades de lógica reactiva compleja. Con VPasCode, puedes crear transiciones de estado complejas instantáneamente sin lidiar con alineaciones de cuadrícula ni flechas de borde superpuestas.

Guía de sintaxis principal: elementos y construcciones

Para escribir diseños de diagramas de estado de alta calidad y conformes con las normas, necesitas entender puntos de inicio y final, definiciones de estado, transiciones de eventos, estados compuestos anidados y puntos de elección condicional.

1. Estados inicial y final

Cada máquina de estados debe tener un punto de entrada y, opcionalmente, un punto terminal. En la sintaxis de PlantUML, estos elementos de borde se representan con un símbolo de asterisco limpio:

  • [*] --> NombreEstado (Define el estado inicial de inicio)
  • NombreEstado --> [*] (Define el estado final terminal)

2. Definición de estados y transiciones de eventos

Los estados se declaran automáticamente cada vez que están conectados por una flecha direccional (-->). Para agregar contexto a una transición, añade dos puntos (:) seguido por el evento específico, activador de API o llamada de método que causa el cambio de estado:

[*] --> Desconectado
Desconectado --> Conectando : "connect()"
Conectando --> Conectado : "auth_success"

3. Estados compuestos / anidados

Las aplicaciones complejas a menudo presentan estados individuales que contienen sus propios subestados anidados. Puedes implementar estas estructuras compuestas utilizando la palabra clave estadoseguida de una llave de apertura:

estado ActiveWorkspace {
    [*] --> Idle
    Idle --> Escribiendo : "tecla presionada"
    Escribiendo --> Idle : "tiempo de espera"
}

4. Puntos de elección (ramificación condicional)

Cuando ocurre un evento, el sistema a menudo debe evaluar banderas de datos internas antes de determinar el destino del siguiente estado. Para dibujar un diamante de elección estándar de UML, utiliza el token de estereotipo <<elección>> de estereotipo:

estado verificar_pago <<elección>>
OrdenRealizada --> verificar_pago : "procesar()"
verificar_pago --> Pagado : [saldo >= total]
verificar_pago --> Fallido : [saldo < total]

Mejores prácticas para diagramas de estado limpios

  • Aprovecha las descripciones de estado:Puedes agregar detalles operativos claros, funciones de entrada o funciones de salida directamente dentro de un nodo de estado usando un envoltorio de dos puntos en línea (por ejemplo, NombreEstado : entrada / registrarHora()).
  • Mantén los nombres de estado compactos:Usa CamelCase o snake_case para tus códigos de variables de estado internas (por ejemplo, ProcesamientoPago), y usa comillas si necesitas adjuntar una etiqueta larga y legible para humanos a ellos.
  • Gestiona las direcciones de enrutamiento de vectores:Si tus mapas de ciclo de vida de múltiples niveles se vuelven desordenados verticalmente, inserta reglas espaciales en línea dentro de las flechas de conexión (por ejemplo, -derecha-> o -abajo->) para equilibrar la densidad del diseño.

Ejemplos de diagramas de estado de PlantUML en el mundo real

Ejemplo 1: Ciclo de vida de red de dispositivo IoT (Estados compuestos y opciones)

Esta plantilla rastrea los bucles de estado de comportamiento de conexión de un módulo de sensor IoT, demostrando bloques anidados estructurales complejos y puntos de elección de evaluación condicional.

@startuml
[*] --> Offline

Offline --> Connecting : "encendido"

state Connecting {
    [*] --> Inicializando
    Inicializando --> ResolviendoDNS : "hardware_listo"
    ResolviendoDNS --> EnviandoSaludo : "ip_adquirido"
}

state comprobacion_autenticacion <<choice>>
Connecting --> comprobacion_autenticacion : "recibir_desafio_servidor"

comprobacion_autenticacion --> Online : [token_valido]
comprobacion_autenticacion --> Offline : [token_expirado] : "parpadeo_led_rojo"

state Online {
    [*] --> Ocioso
    Ocioso --> TransmitiendoDatos : "disparo_timer"
    TransmitiendoDatos --> Ocioso : "ack_recibido"
    Ocioso --> AhorroEnergia : "bateria_baja_detectada"
}

Online --> Offline : "conexion_perdida"
@enduml

Desglose de sintaxis: Este mapa separa claramente los bucles operativos individuales. Cuando el hardware pasa al estado compuesto Conectando de envoltura, rastrea subestados localizados como la resolución DNS antes de alcanzar el comprobacion_autenticaciondiamante de elección. Los corchetes ([token_valido]) representan condiciones de guardia estándar de UML.

Ejemplo 2: Máquina de estados de cumplimiento de pedidos de comercio electrónico (subestados concurrentes)

Este plano avanzado de empresa modela un sistema de pedidos multi-hilo que muestra comportamientos concurrentes ortogonales (procesamiento simultáneo de paquetes de envío y registros de facturación) utilizando líneas de división (--).

@startuml
[*] --> CarritoCompras

CarritoCompras --> PedidoEnviado : "clic_checkout"
PedidoEnviado --> ProcesandoPago : "autorizar_fondos"

state ProcesandoPago {
    [*] --> ContactandoBanco
    ContactandoBanco --> LiquidacionFinalizada : "captura_exitosa"
}

ProcesandoPago --> PedidoConfirmado : "pago_validado"

state PedidoConfirmado {
    [*] --> ManejoLogistico
    state ManejoLogistico {
        [*] --> RecogiendoArticulos
        RecogiendoArticulos --> EmpaquetandoCaja : "inventario_seguro"
        EmpaquetandoCaja --> EnCaminoEntrega : "etiqueta_impresa"
    }
    --
    [*] --> RegistrosFacturacion
    state RegistrosFacturacion {
        [*] --> CompilandoFactura
        CompilandoFactura --> FacturaEnviada : "pdf_generado"
    }
}

PedidoConfirmado --> PedidoArchivado : "entrega_confirmada"
PedidoArchivado --> [*]
@enduml

Desglose de sintaxis: Dentro de la PedidoConfirmado estructura compuesta, el delimitador de doble guion (--) actúa como un divisor ortogonal. Esto instruye a PlantUML para dividir el diagrama en dos estados concurrentes que se ejecutan en paralelo: la cadena logística física a la izquierda, y las actualizaciones de facturación corporativas a la derecha.

Scroll al inicio