🎬 ATIVIDADE 08: DIAGRAMA DE SEQUÊNCIA (UML)

📖 Fundamentação Teórica

Para realizar este laboratório com sucesso, certifique-se de ter compreendido os conceitos apresentados no:
👉 CAPÍTULO 08: VALIDAÇÃO E GESTÃO

Bem-vindo a mais uma etapa da sua jornada no curso de Gestão de TI / Desenvolvimento de Sistemas. Hoje vamos mergulhar em conceitos que conectam a teoria técnica diretamente com o padrão de excelência da dinâmica de software, entendendo como o sistema "conversa" internamente. 🛡️🧩


🎯 Objetivos de Aprendizagem do Laboratório

Ao final deste laboratório prático (estimativa: 4 horas presenciais / autoguiadas), você será capaz de:

  • Modelar o fluxo temporal de uma funcionalidade específica (Diferente da Classes, que é estático).
  • Identificar Linhas de Vida (Lifelines) de objetos e atores.
  • Representar Mensagens Síncronas, Assíncronas e Respostas.
  • Visualizar a interação entre as camadas do sistema (Interface, Lógica e Banco de Dados).

🏢 O Cenário Prático (Seu Desafio)

Na TecProExpress, você definiu as Classes (Atividade 07). Agora, os desenvolvedores de Frontend e Backend precisam sentar para combinar como as mensagens serão trocadas. O programador da tela pergunta: "Quando eu clicar em 'Confirmar Entrega', para quem eu mando o sinal? Quem valida se o motorista está no local certo? Quem avisa o banco de dados para salvar?".

"Seu desafio como Analista de Sistemas é desenhar o 'filme' dessa ação. Você deve criar o Diagrama de Sequência que mostra o passo a passo temporal: da tela para o servidor, do servidor para o banco, e a resposta voltando para o celular do motorista."


🧠 Fundamentos: A Teoria Traduzida

Se o Diagrama de Classes é a foto das peças de um tabuleiro de xadrez, o Diagrama de Sequência é a descrição de uma jogada específica.

Elementos Chaves

  • Atores e Objetos: Ficam no topo. De cada um desce uma Linha de Vida (tracejada).
  • Foco de Controle (Retângulo na linha): Indica que o objeto está "trabalhando" naquele momento.
  • Seta Contínua: Chamada de método (pergunta/ordem).
  • Seta Tracejada: Retorno (resposta).

📊 Visualizando a Lógica

Dica

A ordem importa! No Diagrama de Sequência, o tempo flui de cima para baixo. A primeira mensagem do topo é a primeira coisa que acontece no sistema.

```mermaid sequenceDiagram participant M as Motorista participant T as Tela App participant S as Servidor API participant B as Banco de Dados
M->>T: Clica em "Finalizar"
T->>S: validarLocalizacao(gps)
S->>B: salvarStatus("Entregue")
B-->>S: OK (Sucesso)
S-->>T: Exibir Mensagem Sucesso
T-->>M: Notificação na Tela

![Diagrama de Sequência TecProExpress (UML)](img/es_atv_08_sequencia.svg)

---

## 📖 Exemplo Guiado
Abaixo, veja como planejar a sequência do "Login" no sistema da TecProExpress.

| Ordem | Quem fala com quem? | O que é dito? |
| :--- | :--- | :--- |
| 1 | Usuário -> Tela | Digita usuário/senha e clica em Entrar. |
| 2 | Tela -> Servidor | `autenticar(user, pass)` |
| 3 | Servidor -> Banco | `SELECT * FROM usuarios...` |
| 4 | Banco -> Servidor | Retorna os dados do usuário. |
| 5 | Servidor -> Tela | Login Autorizado. |

#### 📊 Dinâmica de Chamadas e Foco de Controle
```mermaid
sequenceDiagram
    autonumber
    actor U as Usuário
    participant T as Tela Login
    participant S as Servidor Auth
    
    U->>T: Digita credenciais e clica em Entrar
    activate T
    T->>S: POST /login (payload JSON)
    activate S
    Note over S: Autentica credenciais e gera JWT
    S-->>T: 200 OK (Token JWT)
    deactivate S
    T-->>U: Redireciona para o Dashboard
    deactivate T

🛠️ Regras de Ouro do Diagrama

  1. Objetos nunca falam sozinhos: Uma mensagem sempre sai de uma linha de vida e vai para outra.
  2. Use verbos de ação: As setas representam chamadas de funções que você definiu lá na Atividade 07.
  3. Mantenha o foco: Não tente colocar 50 telas no mesmo diagrama. Escolha um fluxo (ex: Realizar Compra) e desenhe apenas ele.

🔍 Detalhamento do Processo:

  • O Diagrama de Sequência é o melhor lugar para descobrir bugs de lógica. Se você desenhou que a "Tela" fala direto com o "Banco de Dados", você descobriu uma falha de segurança! Na engenharia profissional, a Tela sempre fala com o Servidor, e o Servidor fala com o Banco.


💻 Simulação de Sequência de Chamadas (Trace Middleware) em Python

Para inspecionar na prática a troca temporal de mensagens entre Usuário, Frontend, API e Banco de Dados:

# simulador_sequencia.py
import time

class BancoDadosMock:
    def consultar_usuario(self, email: str) -> dict:
        time.sleep(0.05) # Simula latência de rede/disco
        print("      [DB] 💾 SELECT * FROM usuarios WHERE email = :email -> Encontrado!")
        return {"id": 1, "nome": "Carlos Silva", "senha_hash": "$2b$12$e8f..."}

class ServidorAPIMock:
    def __init__(self, db: BancoDadosMock) -> None:
        self.db = db

    def autenticar(self, email: str, senha: str) -> dict:
        print("   [API] ⚙️ Recebida requisição POST /api/v1/auth/login")
        user = self.db.consultar_usuario(email)
        print("   [API] 🔐 Validando hash de senha e gerando Token JWT...")
        return {"status": 200, "token": "eyJhbGciOiJIUzI1NiIsIn...", "nome": user["nome"]}

class FrontendAppMock:
    def __init__(self, api: ServidorAPIMock) -> None:
        self.api = api

    def clicar_botao_entrar(self, email: str, senha: str) -> None:
        print("[UI] 📱 Usuário clicou em 'Entrar'. Disparando requisição HTTP...")
        resposta = self.api.autenticar(email, senha)
        print(f"[UI] 🟢 200 OK recebido! Redirecionando para Dashboard. Bem-vindo(a), {resposta['nome']}!")

if __name__ == "__main__":
    print("=" * 65)
    print("⏱️  SIMULADOR DE TRACE TEMPORAL (DIAGRAMA DE SEQUÊNCIA UML)")
    print("=" * 65)

    db = BancoDadosMock()
    api = ServidorAPIMock(db)
    app = FrontendAppMock(api)

    app.clicar_botao_entrar("carlos@tecproexpress.com", "SenhaForte123")
    print("=" * 65)

🖥️ Saída Esperada no Terminal:

=================================================================
⏱️  SIMULADOR DE TRACE TEMPORAL (DIAGRAMA DE SEQUÊNCIA UML)
=================================================================
[UI] 📱 Usuário clicou em 'Entrar'. Disparando requisição HTTP...
   [API] ⚙️ Recebida requisição POST /api/v1/auth/login
      [DB] 💾 SELECT * FROM usuarios WHERE email = :email -> Encontrado!
   [API] 🔐 Validando hash de senha e gerando Token JWT...
[UI] 🟢 200 OK recebido! Redirecionando para Dashboard. Bem-vindo(a), Carlos Silva!
=================================================================

🌐 Exemplo de Requisição cURL para o Fluxo de Autenticação (Swagger /docs)

curl -X POST "http://127.0.0.1:8000/api/v1/auth/login" \
     -H "Content-Type: application/json" \
     -d '{
       "email": "carlos@tecproexpress.com",
       "senha": "SenhaForte123"
     }'

🔹 Resposta JSON do Servidor (Token JWT):

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "bearer",
  "usuario": {
    "id": 1,
    "nome": "Carlos Silva",
    "perfil": "MOTORISTA"
  }
}

📤 Instruções de Entrega (Microsoft Teams)

Após validar suas documentações técnicas:

  1. Salve o arquivo de documentação com o nome Atividade_08.md e a imagem do seu diagrama de sequência com o nome Atividade_08.png na pasta es-atv-08-sequencia/ do seu repositório GitHub.
  2. Certifique-se de fazer o commit e push para o repositório público.
  3. Submeta o link do seu repositório no Microsoft Teams para avaliação do professor.

💡 Checkpoint de Lógica

Importante

Reflexão Profissional: Se durante o desenho do Diagrama de Sequência você perceber que precisa chamar um método chamado verificarEstoque(), mas esse método não existe na classe Estoque lá na sua Atividade 07, o que você deve fazer? (Resposta: Voltar na Atividade 07 e atualizar o Diagrama de Classes. A modelagem é um processo vivo e as atividades devem estar sempre sincronizadas). 🧠🛡️

---

📊 Rubrica Formativa de Avaliação

Critério de Avaliação Insuficiente (0% - 40%) Regular (41% - 70%) Excelente (71% - 100%)
Diagrama de Sequência (UML) Diagrama sem participantes claros ou misturando chamadas com retornos. Desenha o fluxo mas sem a distinção de setas de mensagem (síncrona) e retorno (assíncrona/tracejada). Diagrama de sequência limpo com ao menos 3 participantes (Ator, Tela, Banco), chamadas síncronas e retornos tracejados.
Sincronismo com o Diagrama de Classes Utiliza objetos e métodos inventados que não existem no Diagrama de Classes (Atv 07). Utiliza participantes coerentes mas omite retornos de dados importantes. Sincronia impecável de métodos e entidades entre o Diagrama de Sequência e o Diagrama de Classes.
Entrega no GitHub Entrega fora da pasta `es-atv-08-sequencia/`. Entrega o texto sem a imagem do diagrama de sequência. Submete `Atividade_08.md` e `Atividade_08.png` no repositório com validação de formato.