🛠️ Atividades

📊 Atividade 11: Diagrama de Atividades (UML)

Bem-vindo ao início do Bloco Avançado de Engenharia de Software. Ao longo das próximas semanas, você sairá da modelagem puramente estática e entrará de cabeça na lógica processual, no design de APIs modernas, no ecossistema corporativo (Java 17, Spring Boot 3.5.x, Thymeleaf, HTMX) e nas práticas de DevOps. Hoje, seu desafio é modelar o fluxo procedural dinâmico usando o Diagrama de Atividades. 🛡️🧩

🎯 Objetivo da Aula

Ao final desta atividade, você será capaz de:

  • Modelar a lógica processual e fluxos de negócio usando a sintaxe UML.
  • Representar bifurcações e junções lógicas (decisões lógicas).
  • Representar forks e joins para fluxos de processamento em paralelo.
  • Organizar responsabilidades usando Raias de Natação (Swimlanes / Subgraphs).

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

Na TecProExpress, a diretoria de Logística percebeu um grande gargalo: quando um cliente clica em "Confirmar Compra", o sistema antigo esperava o faturamento da Nota Fiscal terminar para somente depois avisar o estoque. Em dias de grande volume, os motoristas ficavam parados esperando a emissão da nota, mesmo com a carga já pronta para carregar!

"Seu desafio como Analista de Processos de TI é desenhar o fluxo de atividades de faturamento e separação de forma paralela. Você deve modelar o processo de ponta a ponta: do clique do usuário, dividindo a ação em duas linhas paralelas (Faturamento e Separação), juntando-as no carregamento e finalizando com a saída do caminhão."


🧠 Fundamentos: A Teoria Traduzida

O Diagrama de Atividades UML é como um super fluxograma. Ele descreve a ordem em que as atividades de um sistema ou processo ocorrem, com excelente suporte para paralelismo.

Elementos Chave:

  1. Nó Inicial (Círculo Preto Sólido): Onde o processo começa.
  2. Ação/Atividade (Retângulo Arredondado): Um passo procedural executado pelo sistema ou humano.
  3. Fork (Barra de Divisão): Divide uma linha em duas ou mais ações que acontecem em paralelo.
  4. Join (Barra de Sincronização): Aguarda todas as linhas paralelas terminarem para continuar o fluxo.
  5. Decisão (Losango): Uma bifurcação baseada em uma pergunta do tipo Sim/Não.
  6. Nó Final (Círculo com Alvo): Onde o processo termina.

📊 Visualizando a Lógica

Dica:Fork vs Decisão: A decisão escolhe apenas um caminho. O Fork aciona todos os caminhos ao mesmo tempo. Nunca confunda as duas coisas!

📖 Exemplo Guiado

Abaixo, veja como detalhar o processamento com raias de natação (separando as responsabilidades entre Cliente, Financeiro e Logística).

Elemento UMLO que representa?Ator/Componente Responsável
Iniciar CompraNó InicialCliente
Faturar CartãoAçãoFinanceiro (Gateway)
Separar CaixasAçãoLogística (Operador)
Despachar CaminhãoAçãoTransportadora

🛠️ Estrutura Visual da Expedição

Para facilitar a leitura profissional, dividimos o fluxo usando Raias de Natação (subgraphs no Mermaid):

🔍 Detalhamento do Processo:

  • A raia de natação deixa evidente quem faz o quê. Se o Financeiro falhar ao registrar impostos, o Join bloqueia o carregamento do caminhão na Transportadora, mesmo que a Logística já tenha embalado tudo!

🛠️ Prática Obrigatória 1: O Diagrama de Atividades

Cenário: O projeto de grupo semestral que você está desenvolvendo.

  1. Selecione a funcionalidade principal ou a jornada de maior complexidade do seu sistema (Ex: Devolução de Mercadorias, Cadastro e Aprovação de Motoristas, Compra com Vários Modos de Pagamento).
  2. Identifique pelo menos 3 raias de responsabilidade (Humanos ou Sistemas/Componentes).
  3. Insira pelo menos 1 Fork e 1 Join para representar ações executadas em paralelo.
  4. Insira pelo menos 1 Decisão com caminhos alternativos de erro ou validação.

🏁 Resultado Esperado (Para sua Referência)

Uma imagem (PNG/JPG) do diagrama de atividades estruturado de forma limpa, indicando claramente os caminhos paralelos e as fronteiras de responsabilidade.


🛠️ Prática Obrigatória 2: Justificativa de Paralelismo

Cenário: Defesa arquitetural do processo.

  1. Escreva uma breve justificativa de 1 parágrafo explicando por que você decidiu paralelizar as ações mapeadas na Prática 1.
  2. Explique o que aconteceria se esse processo fosse executado de forma estritamente sequencial (Cascata procedural) em termos de performance e satisfação do usuário.

📤 Instruções de Entrega (Microsoft Teams)

Após validar suas modelagens técnicas:

  1. Salve o arquivo de justificativa como Atividade_11.md e a imagem do seu diagrama com o nome Atividade_11.png na pasta es-atv-11-atividades/ 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: O que acontece com o fluxo de atividades se uma das ramificações que saem de um Fork entrar em um loop infinito ou falhar e nunca alcançar o Join? (Resposta: O Join travará o processo para sempre, pois ele exige por especificação matemática que todas as ramificações paralelas cheguem até ele para liberar o fluxo sequencial subsequente). 🧠🛡️

📊 Rubrica Formativa de Avaliação

Critério de Avaliação Insuficiente (0% - 40%) Regular (41% - 70%) Excelente (71% - 100%)
Diagrama de Atividades UML & Raias de Natação Desenha o fluxo sem raias de natação ou sem nós de decisão e paralelismo. Mapeia as raias mas confunde os conceitos de Fork e Join. Diagrama de atividades impecável com ao menos 3 raias, nós de decisão claros e par Fork/Join bem balanceado.
Justificativa de Paralelismo Omite a justificativa de paralelização de tarefas. Justifica superficialmente sem comparar com a execução sequencial procedural. Justificativa de alto nível comparando ganhos de performance e UX em relação à execução estritamente sequencial.
Entrega no GitHub Entrega fora da pasta `es-atv-11-atividades/`. Entrega apenas o texto sem o arquivo `.png` do diagrama. Submete `Atividade_11.md` e `Atividade_11.png` no repositório com formatação validada.
Copyright © 2026