Guia de Sintaxe de Diagrama de Estados PlantUML

O que é um Diagrama de Estados?

Um Diagrama de Estados (muitas vezes chamado de Máquina de Estados ou Diagrama de Estados) é um diagrama comportamental diagrama UML que modela o ciclo de vida de um único objeto do sistema, entidade empresarial ou processo em tempo de execução. Como um componente fundamental da especificação da Linguagem de Modelagem Unificada (UML), este tipo específico tipo de diagrama UML ilustra os diversos estados que um objeto pode ocupar desde sua instanciação inicial até sua destruição final, juntamente com os eventos ou condições específicos que desencadeiam uma mudança de um estado para outro.

Seja você documentando as flags de conexão complexas de uma conexão WebSocket, as etapas de processamento de pedidos de um modelo de checkout de comércio eletrônico ou o comportamento de um sistema de hardware autônomo, uma máquina de estados UML fornece aos desenvolvedores de software e arquitetos de software um plano claro e inequívoco de lógica reativa complexa. Com VPasCode, você pode criar transições de estado complexas instantaneamente, sem precisar se preocupar com alinhamentos de grade ou setas de limite sobrepostas.

Guia de Sintaxe Básica: Elementos e Construções

Para escrever layouts de diagrama de estados de alta qualidade e compatíveis com padrões, você precisa entender pontos de início e fim, definições de estado, transições de eventos, estados compostos aninhados e pontos de escolha condicional.

1. Estados Inicial e Final

Toda máquina de estados deve ter um ponto de entrada e, opcionalmente, um ponto terminal. Na sintaxe PlantUML, esses elementos de limite são representados por um envelope simbólico de asterisco limpo:

  • [*] --> NomeDoEstado (Define o estado inicial de início)
  • NomeDoEstado --> [*] (Define o estado final terminal)

2. Definindo Estados e Transições de Eventos

Estados são declarados automaticamente sempre que estão conectados por uma seta direcional (-->). Para adicionar contexto a uma transição, acrescente dois pontos (:) seguido pelo evento específico, gatilho da API ou chamada de método que causa a mudança de estado:

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

3. Estados Compostos / Aninhados

Aplicações complexas frequentemente apresentam estados individuais que contêm seus próprios subestados aninhados. Você pode implementar essas estruturas compostas usando a palavra-chave estadopalavra-chave seguida por uma chave de abertura:

estado ActiveWorkspace {
    [*] --> Ocioso
    Ocioso --> Digitando : "pressionarTecla"
    Digitando --> Ocioso : "tempoLimite"
}

4. Pontos de Escolha (Ramificação Condicional)

Quando um evento ocorre, o sistema frequentemente precisa avaliar bandeiras de dados internos antes de determinar o próximo destino do estado. Para desenhar um losango de escolha padrão UML, use o token de estereótipo <<escolha>>token de estereótipo:

estado verificar_pagamento <<escolha>>
PedidoEnviado --> verificar_pagamento : "processar()"
verificar_pagamento --> Pago : [saldo >= total]
verificar_pagamento --> Falhou : [saldo < total]

Melhores Práticas para Statecharts Limpos

  • Aproveite as Descrições de Estados:Você pode adicionar detalhes operacionais claros, ganchos de entrada ou funções de saída diretamente dentro de um nó de estado usando um envoltório de dois pontos inline (por exemplo, NomeEstado : entrada / logTimestamp()).
  • Mantenha os Nomes dos Estados Compactos:Use CamelCase ou snake_case para os códigos das suas variáveis de estado internas (por exemplo, ProcessamentoPagamento), e use aspas se precisar anexar uma etiqueta longa e legível por humanos a eles.
  • Gerencie as direções de roteamento vetorial:Se seus mapas de ciclo de vida em múltiplos níveis ficarem confusos verticalmente, insira regras espaciais embutidas nas setas de conexão (por exemplo, -direita-> ou -baixo->) para equilibrar a densidade do layout.

Exemplos de Diagramas de Estados PlantUML do Mundo Real

Exemplo 1: Ciclo de Vida da Rede de Dispositivos IoT (Estados Compostos e Escolhas)

Este modelo rastreia os loops de estado comportamentais de conexão de um módulo de sensor IoT, demonstrando blocos aninhados estruturais complexos e pinos de escolha de avaliação condicional.

@startuml
[*] --> Offline

Offline --> Connecting : "ligar"

state Connecting {
    [*] --> Inicializando
    Inicializando --> ResolvendoDNS : "hardware_pronto"
    ResolvendoDNS --> EnviandoHandshake : "ip_adquirido"
}

state verificacao_autenticacao <<choice>>
Connecting --> verificacao_autenticacao : "receber_desafio_servidor"

verificacao_autenticacao --> Online : [token_valido]
verificacao_autenticacao --> Offline : [token_expirado] : "piscar_led_vermelho"

state Online {
    [*] --> Ocioso
    Ocioso --> TransmitindoDados : "disparo_timer"
    TransmitindoDados --> Ocioso : "ack_recebido"
    Ocioso --> EconomiaEnergia : "bateria_baixa_detectada"
}

Online --> Offline : "conexão_perdida"
@enduml

Análise de Sintaxe: Este mapa separa claramente os loops operacionais individuais. Quando o hardware transiciona para o estado composto Conectando de envoltório, ele rastreia subestados locais como a resolução DNS antes de alcançar o verificacao_autenticacao diamante de escolha. Os colchetes ([token_valido]) representam condições de guarda padrão UML.

Exemplo 2: Máquina de Estados de Cumprimento de Pedidos de Comércio Eletrônico (Subestados Concorrentes)

Este projeto avançado de empresa modela um sistema de pedidos multithreaded, mostrando comportamentos concorrentes ortogonais (processamento de pacotes de envio e registros de faturamento simultaneamente) usando linhas de divisão (--).

@startuml
[*] --> CarrinhoCompras

CarrinhoCompras --> PedidoEnviado : "clique_checkout"
PedidoEnviado --> ProcessandoPagamento : "autorizar_recursos"

state ProcessandoPagamento {
    [*] --> ContatandoBanco
    ContatandoBanco --> PagamentoEfetuado : "captura_sucesso"
}

ProcessandoPagamento --> PedidoConfirmado : "pagamento_aprovado"

state PedidoConfirmado {
    [*] --> GestaoLogistica
    state GestaoLogistica {
        [*] --> SelecionandoItens
        SelecionandoItens --> EmbalandoCaixa : "estoque_reservado"
        EmbalandoCaixa --> EntregaEmAndamento : "etiqueta_impressa"
    }
    --
    [*] --> RegistrosFaturamento
    state RegistrosFaturamento {
        [*] --> MontandoFatura
        MontandoFatura --> FaturaEnviada : "pdf_gerado"
    }
}

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

Análise de Sintaxe: Dentro da PedidoConfirmado estrutura composta, o delimitador de duplo traço (--) atua como um divisor ortogonal. Isso instrui o PlantUML a dividir o diagrama em dois estados concorrentes que executam em paralelo: a pipeline logística física à esquerda e as atualizações de faturamento corporativo à direita.

Scroll to Top