UA13 — Diagrama de Sequência
O diagrama de sequência descreve as interações entre objetos em termos de troca de mensagens ao longo do tempo. Também chamado de diagrama de eventos — mostra quem chama quem, em que ordem, e permite prever como o sistema se comportará em um cenário específico.
Linhas de Vida (Lifelines)
A linha de vida (lifeline) é um elemento nomeado que representa um participante individual na interação. É exibida como uma caixa no topo (com o nome do objeto/ator) seguida de uma linha vertical tracejada. Representa apenas uma entidade por vez — se o elemento tiver multiplicidade, a lifeline representa um representante arbitrário.
Tipos de cabeça de lifeline: objeto (retângulo), ator (boneco), Boundary (fronteira — View), Control (controle — Controller), Entity (entidade — Model).
Tipos de Mensagem
| Tipo | Seta | Característica |
|---|---|---|
| Síncrona | Linha sólida, ponta sólida | Requer resposta antes de continuar. Aguarda retorno. |
| Assíncrona | Linha sólida, ponta aberta | Não aguarda resposta. Continua processando. Usada em multithreading e middleware. |
| Retorno/Resposta | Linha tracejada, ponta aberta | Valor retornado ao chamador após a execução. |
| Self (auto-delegação) | Flecha em U voltada para si | Objeto envia mensagem para si mesmo. |
| Criação | Linha tracejada, ponta aberta → retângulo | Cria um novo objeto. Estereótipo «create». |
| Destruição | Seta com X no final | Destrói o objeto. O X marca o fim da lifeline. |
| Encontrada | Seta de ponto preenchido para lifeline | Enviada de um remetente desconhecido. |
| Perdida | Seta de lifeline para ponto preenchido | Enviada para um destinatário desconhecido. |
Focos de Controle
O foco de controle (caixa de ativação) é um retângulo estreito desenhado sobre a lifeline, indicando o período em que o objeto está participando ativamente do processo. Chamadas aninhadas geram focos de controle sobrepostos.
Fragmentos Combinados
Permitem adicionar lógica processual ao diagrama: uma ou mais sequências incluídas em uma moldura com execução em circunstâncias específicas.
| Fragmento | Significado | Equivalente no código |
|---|---|---|
[alt] | Alternativa — executa um entre vários ramos condicionais | if / else if / else |
[opt] | Opcional — executa apenas se condição verdadeira | if sem else |
[loop] | Repetição | for / while |
[par] | Paralelo — processamento simultâneo | Thread / async |
[break] | Sequência alternativa em vez de todo o resto do diagrama | break / return antecipado |
[neg] | Sequência inválida / proibida | — |
[critical] | Seção crítica — não pode ser interrompida | synchronized / mutex |
[assert] | Sequências não mostradas são inválidas | assertion |
Arquitetura em Camadas no Diagrama de Sequência
Sistemas modernos são organizados em camadas. O diagrama de sequência expressa essas camadas por meio dos tipos de lifeline:
| Tipo de Lifeline | Camada MVC | Responsabilidade |
|---|---|---|
| Boundary (fronteira) | View | Interface com o usuário |
| Control (controle) | Controller | Recebe requisições; coordena Model e View |
| Entity (entidade) | Model | Acesso a dados, lógica de negócio |
Importante: no MVC, as requisições chegam ao Controller (não à View). O Controller solicita dados ao Model, que retorna os dados, e então o Controller envia para a View formatar o output.
Passos para criar um diagrama de sequência
- Escolher um caso de uso.
- Identificar os objetos que fazem parte da interação.
- Identificar o objeto que começa a interação.
- Identificar as mensagens trocadas entre os objetos.
- Identificar a sequência dessas mensagens.
Pré-requisitos: casos de uso e diagrama de classes previamente elaborados — os métodos, atributos e classes já definidos facilitam muito a criação.
Como ler um diagrama de sequência
Leia de cima para baixo (ordem temporal). Setas sólidas = chamadas. Setas tracejadas = retornos. Retângulos sobre as lifelines = período de execução. A largura do tempo flui para baixo — mensagens mais abaixo ocorrem mais tarde.
Práticas Modernas — Diagrama de Sequência
- Mermaid sequenceDiagram e PlantUML permitem criar diagramas de sequência a partir de texto — versionados em Git e renderizados em GitHub/GitLab. Substituem o uso de ferramentas gráficas.
- OpenAPI (Swagger) documenta APIs REST com exemplos de request/response — é o “diagrama de sequência” da comunicação entre microsserviços. Ferramentas geram código e testes a partir do contrato.
- AsyncAPI é o equivalente do OpenAPI para sistemas assíncronos (Kafka, RabbitMQ, WebSockets) — descreve os eventos e mensagens trocadas entre produtores e consumidores.
- Distributed Tracing (Jaeger, Zipkin, Datadog APM) gera diagramas de sequência ao vivo a partir do tráfego real do sistema em produção — mais fiel que qualquer diagrama manual.
Dicas para a Prova
- Linha de vida (lifeline) = participante individual na interação (não mensagem, não foco de controle, não fragmento).
- Mensagem assíncrona = não precisa de resposta para a interação continuar.
- Fragmento que permite processamento simultâneo =
[par]. - No modelo MVC, o objeto do tipo Boundary representa a camada View.
- Passos para criar: 1-Escolher caso de uso; 2-Identificar objetos; 3-Identificar quem inicia; 4-Identificar mensagens; 5-Identificar sequência.
Referências bibliográficas desta UA
- LEDUR, C.L. Análise e Projeto de Sistemas, 2017.
- FOWLER, M. UML Distilled, 3ª ed., 2003.
- OBJECT MANAGEMENT GROUP. UML Superstructure Specification 2.4.1, 2011.