⏱️ Cap 13: Diagramas de Interação: Sequência, Comunicação e Visão Geral
Guia Extra: Engenharia de Software e Modelagem UML • Bloco 4: Comportamento e Arquitetura
🗺️ Mapa Conceitual do Capítulo
flowchart TD
INT["Diagramas de Interação (UML 2.5)\nModelagem da Troca de Mensagens entre Objetos"] --> SEQ["Diagrama de Sequência (Sequence Diagram)\nOrdenação Temporal Estrita de Cima para Baixo"]
INT --> COM["Diagrama de Comunicação (Communication Diagram)\nÊnfase na Malha Estrutural e Numeração Decimal"]
INT --> VG["Visão Geral de Interação (Interaction Overview)\nEncadeamento de Cenários em Alto Nível"]
subgraph SEQ_PRIMITIVAS["Primitivas do Diagrama de Sequência"]
SEQ --> LL["Linhas de Vida (Lifelines) & Barras de Ativação (Execution Occurrences)"]
SEQ --> MSG["Tipos de Mensagens: Síncrona · Assíncrona · Retorno · Criação · Destruição"]
SEQ --> FRAG["Fragmentos Combinados (Interaction Frames):\nalt · opt · loop · par · break · ref · critical"]
end
style INT fill:#ede7f6,stroke:#512da8,stroke-width:2px
style SEQ fill:#e1f5fe,stroke:#0288d1,stroke-width:2px
style COM fill:#fff3e0,stroke:#ff9800,stroke-width:2px
style VG fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style SEQ_PRIMITIVAS fill:#fce4ec,stroke:#e91e63,stroke-width:2px
⏱️ 1. O Diagrama de Sequência e o Fluxo Temporal
O Diagrama de Sequência é o mais poderoso e popular dos diagramas comportamentais da UML. Ele detalha exatamente como um conjunto de objetos colabora dinamicamente para realizar um cenário de uso específico, com a dimensão do tempo transcorrendo estritamente de cima para baixo.
Enquanto o Caso de Uso descreve o que o usuário deseja e o Diagrama de Classes define quem possui quais atributos, o Diagrama de Sequência conecta os dois mundos: cada mensagem enviada a um objeto torna-se obrigatoriamente um método público na classe de destino.
sequenceDiagram
autonumber
actor Cliente as Ator: Cliente
participant Handler as :PedidoController
participant Service as :PedidoService
participant DB as :PedidoRepository
Cliente->>+Handler: POST /pedidos (JSON Payload)
Handler->>+Service: criarPedido(dados)
alt Estoque Disponível
Service->>+DB: salvar(pedido)
DB-->>-Service: Pedido persistido (ID: 104)
Service-->>Handler: PedidoDTO
Handler-->>Cliente: 201 Created + JSON
else Estoque Esgotado
Service-->>-Handler: Erro: EstoqueInsuficiente
Handler-->>-Cliente: 422 Unprocessable Entity
end
📐 2. Tipologia Rigorosa de Mensagens na UML
A notação gráfica da ponta da seta determina a semântica de concorrência e bloqueio no código-fonte:
| Tipo de Mensagem | Notação Gráfica UML | Semântica de Execução | Equivalente em Código |
|---|---|---|---|
| Síncrona (Call) | Linha sólida com ponta preenchida triangular sólida ($\blacktriangleright$) | O remetente bloqueia a execução e aguarda o término do método chamado. | Chamada de função comum resp = servico.calcular() ou HTTP request bloqueante. |
| Assíncrona (Signal) | Linha sólida com ponta aberta em V ($\rightarrow$) | O remetente dispara a mensagem e continua trabalhando imediatamente. | Disparo de goroutine, thread avulsa ou publicação em fila RabbitMQ/Kafka. |
| Resposta (Reply / Return) | Linha tracejada com ponta aberta ($\dashrightarrow$) | Devolve o controle e o valor de retorno da chamada síncrona. | Comando return resultado; de uma função. |
| Criação de Objeto | Linha tracejada que aponta para o cabeçalho do novo participante | A instância do objeto passa a existir na memória a partir daquele instante. | Operador new ou instanciação de struct &Pedido{}. |
| Destruição de Objeto | Linha que termina em um grande X na base da linha de vida |
A instância é liberada da memória (destruição explícita / delete em C++). | Encerramento de sessão ou descarte de recurso gerenciado. |
🔲 3. Fragmentos Combinados de Interação (Interaction Frames)
A partir da UML 2.0, a introdução dos Fragmentos Combinados transformou os diagramas de sequência em especificações lógicas completas, capazes de expressar desvios condicionais e laços sem a necessidade de desenhar diagramas separados:
alt(Alternativas): Representa estruturasif / else if / else. É dividido em compartimentos horizontais delimitados por linhas tracejadas, cada um com sua Expressão de Guarda entre colchetes ([condicao]). Apenas o compartimento cuja guarda for verdadeira será executado.opt(Opcional): Equivalente a umifsimples sem blocoelse. Executa o fragmento apenas se a guarda for satisfeita.loop(Repetição): Itera sobre uma coleção de objetos (loop [para cada item do carrinho]), representando laçosforouwhile.par(Paralelo): Dispara múltiplos sub-cenários concorrentemente em threads separadas, representando operações assíncronas paralelas.break(Interrupção): Executado como um fluxo de exceção (análogo a umtry / catchcomthrow). Se a condição for atendida, o resto do diagrama de sequência é imediatamente abortado.ref(Referência): Reutiliza um diagrama de sequência externo completo, encapsulando lógicas complexas e modulares (ex:ref: UC01_Autenticacao_JWT).
🕸️ 4. Diagrama de Comunicação vs Sequência: Isomorfismo Semântico
O Diagrama de Comunicação (denominado Diagrama de Colaboração na UML 1.x) contém exatamente o mesmo conteúdo informacional do Diagrama de Sequência, porém organiza os elementos com foco na conectividade estrutural entre os objetos, e não no eixo temporal vertical:
- Os objetos são desenhados como caixas espalhadas no espaço, interligadas por linhas de associação.
- As mensagens trafegam sobre as linhas com setas de direção acompanhadas de uma Numeração Decimal Hierárquica:
1. registrarVenda()1.1. debitarEstoque()1.2. emitirComprovante()2. notificarCliente()
💡 Critério de Escolha de Engenharia:
- Utilize Sequência quando a ordem cronológica, prazos de expiração ou fluxos condicionais (
alt,loop) forem o foco principal.- Utilize Comunicação quando desejar enfatizar a malha de acoplamento entre os objetos e verificar quais classes possuem conexões excessivas.