Aula 08 - Diagrama de Sequência 🔄
Módulo
MÓDULO 3 – DIAGRAMAS COMPORTAMENTAIS UML
1. Fundamentos do Diagrama de Sequência 📚
Nesta aula, estudaremos o Diagrama de Sequência, que modela a interação entre objetos focando na ordem temporal das mensagens.
🧠 Conceitos Fundamentais
Ator/Objeto
Entidades que participam da interação, representadas por retângulos no topo do diagrama.
Linha de Vida (Lifeline)
Linha tracejada vertical que representa a existência do objeto ao longo do tempo.
Mensagem
Comunicação entre objetos, representada por setas horizontais com rótulos que indicam operação/método.
Ativação
Retângulo fino na linha de vida que indica quando o objeto está processando uma operação.
2. Anatomia do Diagrama de Sequência 📊
sequenceDiagram
participant U as 👤 Usuário
participant S as 📱 Sistema
participant BD as 🗺 BD
participant Email as 📧 ServicoEmail
U->>+S: login(email, senha)
S->>+BD: validarCredenciais(email, senha)
BD-->>-S: credenciaisValidas: Boolean
alt credenciais válidas
S->>+BD: buscarDadosUsuario(email)
BD-->>-S: dadosUsuario: Usuario
S->>+Email: enviarNotificacaoLogin(usuario)
Email-->>-S: emailEnviado: Boolean
S-->>-U: loginSucesso(dadosUsuario)
else credenciais inválidas
S->>S: incrementarTentativasFalhas(email)
S-->>-U: loginFalha("Credenciais inválidas")
end 3. Tipos de Mensagens 📨
Mensagens Síncronas e Assíncronas
Mensagem Síncrona (-->)
Comportamento: Remetente aguarda resposta antes de continuar
**Uso**: Chamadas de método, consultas ao banco de dados
**Notação**: Seta sólida
**Exemplo**: `cliente.calcularDesconto(valor)`
Mensagem Assíncrona (->>)
Comportamento: Remetente não aguarda resposta
**Uso**: Notificações, logs, emails
**Notação**: Seta aberta
**Exemplo**: `sistema.enviarEmail(destinatario)`
Mensagem de Retorno (-->>)
Comportamento: Resposta a uma mensagem anterior
**Opcional**: Pode ser omitida se óbvia
**Notação**: Seta tracejada
4. Fragmentos de Combinação 💻
5. Fragmentos Avançados ⚙️
Alt (Alternative)
Estrutura Condicional
```mermaid sequenceDiagram participant C as Cliente participant S as Sistema
C->>S: finalizarPedido()
alt estoque suficiente
S->>S: processarPagamento()
S-->>C: pedidoConfirmado()
else produto indisponível
S-->>C: produtoIndisponivel()
else pagamento negado
S-->>C: pagamentoRejeitado()
end
```
Loop (Repetição)
Estrutura de Repetição
```mermaid sequenceDiagram participant S as Sistema participant BD as BancoDados
loop para cada item do pedido
S->>BD: verificarEstoque(item)
BD-->>S: quantidadeDisponivel
S->>S: atualizarItemPedido(item)
end
```
Par (Paralelo)
Processamento Paralelo
```mermaid sequenceDiagram participant S as Sistema participant Email as Email participant SMS as SMS participant Log as Log
par notificar cliente
S->>Email: enviarConfirmacao()
and notificar por SMS
S->>SMS: enviarSMS()
and registrar auditoria
S->>Log: registrarOperacao()
end
```
6. Auto-Mensagens e Criar/Destruir 🎨
Auto-Mensagens
Mensagem para Si Mesmo
Representa operações internas de um objeto.
**Notação**: Seta que começa e termina na mesma linha de vida
**Uso**: Métodos privados, validações internas
Criar e Destruir Objetos
Criar Objeto
Notação: Mensagem apontando para o retângulo do objeto
**Rótulo**: `<<create>>` ou `new(parâmetros)`
Destruir Objeto
Notação: X no final da linha de vida
**Rótulo**: `<<destroy>>` ou `delete`
7. Boas Práticas 📐
Organização Visual
!!! tip "Diretrizes de Layout" 1. Objetos da esquerda para direita: Do ator para sistemas internos 2. Mensagens numeradas: Para processos complexos 3. Comentários: Explique lógicas não óbvias 4. Agrupamento: Use fragmentos para organizar fluxos
Granularidade Adequada
Nível de Detalhe
❌ Muito detalhado: objeto.setAtributo(valor), validarCPF()
✅ **Adequado**: `processarPagamento()`, `enviarConfirmacao()`
❌ **Muito genérico**: `processarPedido()` (sem mostrar interações internas)
8. Mini-Projeto Prático 🚀
Cenário: Sistema de Reserva de Quartos de Hotel
Desafio: 1. Identifique 3 participantes: Portador, Maquineta, Operadora. 2. Desenhe o fluxo de uma "Autorização de Compra". 3. Use um fragmento alt para tratar o cenário de "Saldo Insuficiente".
Dica de Sênior
Não modele cada linha de código. Foque nas mensagens importantes entre os componentes principais da arquitetura.
🎯 Materiais e Prática
-
Slides Interativos --- Acesse a apresentação visual da aula. Ver Slides
-
Testar Conhecimento --- Responda ao Quiz da aula para fixar os conceitos. Responder Quiz
-
Exercícios Progressivos --- Pratique com 5 exercícios de fixação e desafio. Praticar
-
Mini-Projeto --- Aplique a análise no seu projeto de referência. Ver Projeto
Próxima Aula: Diagrama de Comunicação ➡️