Aula 18 - Diagramas de Atividades, Estado e Interação Avançados 🔄
Objetivo Pedagógico
Objetivo: Modelar fluxos de controle complexos e ciclos de vida de entidades utilizando Diagramas de Atividades (com partições/raias e forks/joins) e Diagramas de Máquinas de Estados (com guardas, ações de entrada/saída e superestados).
📑 1. Fundamentos Teóricos & Análise Técnica
Enquanto os diagramas estruturais representam a ossatura estática do sistema, os Diagramas Comportamentais da UML descrevem o fluxo de execução temporal, a concorrência e as mutações de ciclo de vida das entidades: 1. Diagrama de Atividades (Activity Diagram): - Modela o fluxo de controle algorítmico e a passagem de dados entre passos de um processo de negócio. - Raias de Natação (Swimlanes / Partitions): Delimitam formalmente as responsabilidades de diferentes atores, microsserviços ou setores da organização. - Bifurcação e Junção Concorrente (Fork e Join): - Fork: Divide uma linha de execução sequencial em múltiplos fluxos executados simultaneamente em paralelo. - Join: Sincroniza os fluxos paralelos, aguardando que todas as tarefas concorrentes terminem antes de permitir o avanço do processo. 2. Diagrama de Máquina de Estados (State Machine Diagram): - Modela todos os estados possíveis pelos quais um objeto pode transitar durante sua existência em resposta a eventos externos. - Transições com Gatilho, Guarda e Efeito: Evento [Condição de Guarda] / Ação Executada. Se a guarda for falsa, o evento é rejeitado e o objeto permanece no estado atual. - Superestados Compostos: Agrupamento hierárquico de estados afins com tratamento comum de cancelamento ou falha.
📐 Arquitetura Conceitual & Diagrama de Fluxo
stateDiagram-v2
[*] --> Criado: Novo Pedido Iniciado
Criado --> AguardandoPagamento: Checkout Confirmado
state AguardandoPagamento {
[*] --> GerandoPix
GerandoPix --> QRDisponivel: Pix Criado
QRDisponivel --> ValidandoTransacao: Webhook Recebido
}
AguardandoPagamento --> Pago: Pagamento Confirmado [Valor == Total]
AguardandoPagamento --> Cancelado: Timeout de 15 minutos atingido
Pago --> EmPreparacao: Enviar para Faturamento
EmPreparacao --> Enviado: Código de Rastreio Anexado
Enviado --> Entregue: Confirmação de Recebimento
Entregue --> [*]
Cancelado --> [*] 🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Concorrência Explícita com Fork/Join: Garantia de representação visual de operações em paralelo (ex: reservar estoque e debitar cartão simultaneamente). - Transições Protegidas por Guardas: Impedimento de mudanças de estado inconsistentes através de condições booleanas estritas. - Raias de Responsabilidade (Swimlanes): Clareza sobre qual serviço ou ator executa cada etapa do processo de negócio. - Prevenção de Estados Órfãos: Mapeamento exaustivo que garante que todos os estados possuam caminhos de término válidos.
🛠️ 2. Implementação Prática em UML Comportamental, Máquinas de Estados e Diagramas de Atividades
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// order_fulfillment_activity.mermaid (Diagrama de Atividades com Raias e Concorrência Fork/Join)
graph TD
subgraph Cliente["Raia: Cliente"]
Start([Início]) --> Carrinho[Finalizar Compra]
end
subgraph CheckoutService["Raia: Checkout Service"]
Carrinho --> Fork1{Fork: Paralelo}
end
subgraph EstoqueService["Raia: Estoque"]
Fork1 --> ReservarEstoque[Bloquear Itens no Inventário]
end
subgraph GatewayPagamento["Raia: Pagamento"]
Fork1 --> ProcessarCartao[Processar Transação de Crédito]
end
subgraph CheckoutSync["Raia: Checkout Service"]
ReservarEstoque --> Join1{Join: Sincronização}
ProcessarCartao --> Join1
Join1 --> AvaliarDecisao{Ambos com Sucesso?}
AvaliarDecisao -- Sim --> ConfirmarPedido[Emitir Nota Fiscal]
AvaliarDecisao -- Não --> ReverterOperacao[Estornar e Liberar Itens]
end
ConfirmarPedido --> EndSuccess([Fim: Pedido Aprovado])
ReverterOperacao --> EndFail([Fim: Compra Rejeitada]) 💡 Análise Passo a Passo do Código
- Divisão em Subgrafos de Responsabilidade: Evidencia os limites de cada microsserviço no fluxo de orquestração do checkout.
- Uso de Nós
ForkeJoin: Demonstra graficamente o processamento simultâneo de estoque e pagamento para reduzir a latência total. - Ponto de Decisão com Ramificação Clara: Explicita o tratamento transacional compensatório em caso de falha de uma das partes.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto