Pular para conteúdo

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 💻

mkdir diagramas-sequenciacd diagramas-sequenciatouch processamento-pedido.mdecho "# Diagrama de Sequência - Processamento de Pedido" >> processamento-pedido.mdecho "" >> processamento-pedido.mdecho "## Fragmentos utilizados:" >> processamento-pedido.mdecho "- **alt**: Alternativas (if-else)" >> processamento-pedido.mdecho "- **opt**: Opcional (if)" >> processamento-pedido.mdecho "- **loop**: Repetição (while/for)" >> processamento-pedido.mdecho "- **par**: Paralelo (concorrência)" >> processamento-pedido.mdcat processamento-pedido.md

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 ➡️