🔄 Atividade 12: Diagrama de Transição de Estados (UML)
🎯 Objetivo da Aula
Ao final desta atividade, você será capaz de:
- Identificar entidades de negócio com ciclos de vida complexos.
- Modelar os Estados estáveis de um objeto no sistema.
- Mapear Eventos Gatilho (Triggers) que provocam a transição entre estados.
- Aplicar Condições de Guarda (Guards) para proteção lógica contra transições inválidas.
🏢 O Cenário Prático (Seu Desafio)
Na TecProExpress, tivemos um incidente grave de banco de dados: um cliente de suporte ligou reclamando que a sua entrega apareceu no sistema como "Entregue com Sucesso", mas o motorista ainda nem havia saído com o caminhão do centro de distribuição!
Ao analisar o código, a equipe técnica descobriu que não havia validação de regras de negócios. Um motorista distraído clicou no botão "Confirmar Entrega" na tela errada de um pacote que ainda estava no estado de triagem físico!
"Seu desafio como Arquiteto de Software é desenhar o Diagrama de Máquina de Estados para a entidade Entrega. Você deve blindar o sistema, definindo as regras exatas de como um pacote muda de estado (ex: de Pendente para Em Rota) e quais validações (guardas) impedem que um pacote seja marcado como Entregue antes de ser despachado."
🧠 Fundamentos: A Teoria Traduzida
Enquanto o Diagrama de Atividades mostra o fluxo das ações de um processo, o Diagrama de Máquina de Estados foca em um único objeto do início ao fim da sua existência.
Elementos Chave:
- Estado Inicial (Círculo Preto): O ponto de criação do objeto.
- Estado (Retângulo Arredondado): Uma condição estável na vida do objeto onde ele aguarda um evento (Ex:
PENDENTE,EM_ROTA,ENTREGUE). - Transição (Seta Direcionada): A mudança de um estado para o outro.
- Evento Gatilho (Trigger): A ação que dispara a transição (Ex:
despacharPacote()). - Condição de Guarda (Guard - entre colchetes
[...]): Uma regra que precisa ser verdadeira para a transição acontecer. (Ex:[motorista_no_local == true]).
📊 Visualizando a Lógica
📖 Exemplo Guiado
Abaixo, veja o mapeamento de transição para o ciclo de vida do pacote da TecProExpress.
| Estado Origem | Evento Gatilho | Condição Guarda | Estado Destino |
|---|---|---|---|
PENDENTE | despachar() | [motorista_associado != null] | EM_ROTA |
EM_ROTA | confirmarEntrega() | [distancia_gps_cliente < 100m] | ENTREGUE |
EM_ROTA | cancelarPedido() | [motivo != null] | CANCELADO |
🛠️ Regra UML em Sintaxe Padrão:
A sintaxe formal gravada na seta da transição segue o padrão:
Evento [Guarda] / Ação executada
- Exemplo:
confirmarEntrega [comprovanteAnexado] / notificarCliente()
🔍 Detalhamento do Processo:
- Note a guarda
[gps_ok == true]. Se o aplicativo do motorista não coletar a coordenada geográfica a menos de 100 metros da casa do cliente, o sistema bloqueia a mudança para o estadoEntregue, evitando fraudes ou cliques acidentais!
🛠️ Prática Obrigatória 1: A Máquina de Estados
Cenário: O projeto semestral da sua equipe.
- Selecione a entidade mais crítica do seu sistema que possui vários status (Ex:
Pedidoem um e-commerce,Agendamentoem uma clínica,Vagaem um estacionamento). - Mapeie pelo menos 4 estados distintos para essa entidade.
- Defina claramente os Eventos Gatilho em cada seta de transição.
- Adicione pelo menos 2 Condições de Guarda entre colchetes
[...]para blindar transições perigosas.
🏁 Resultado Esperado (Para sua Referência)
Uma imagem (PNG/JPG) do diagrama de máquina de estados UML modelado de forma organizada, exibindo a trajetória completa da entidade do estado inicial ao final.
🛠️ Prática Obrigatória 2: Tabela de Transições Lógicas
Cenário: Detalhamento da lógica de negócios.
- Crie uma tabela com 4 colunas: Estado Origem, Evento Gatilho, Condição de Guarda e Estado Destino.
- Preencha as linhas detalhando as regras lógicas que você desenhou no diagrama da Prática 1.
📤 Instruções de Entrega (Microsoft Teams)
Após validar suas documentações técnicas de estados:
- Salve o arquivo de tabela com o nome
Atividade_12.mde a imagem do seu diagrama com o nomeAtividade_12.pngna pastaes-atv-12-estados/do seu repositório GitHub. - Certifique-se de fazer o commit e push para o repositório público.
- Submeta o link do seu repositório no Microsoft Teams para avaliação do professor.
💡 Checkpoint de Lógica
📊 Rubrica Formativa de Avaliação
| Critério de Avaliação | Insuficiente (0% - 40%) | Regular (41% - 70%) | Excelente (71% - 100%) |
|---|---|---|---|
| Máquina de Estados & Condições de Guarda | Menos de 4 estados ou transições sem eventos gatilho claros. | Mapeia os 4 estados mas sem declarar as condições de guarda `[...]`. | Diagrama de máquina de estados impecável com ao menos 4 estados, eventos gatilho e guardas `[...]` de proteção. |
| Tabela de Transições Lógicas | Omite a tabela de transições lógicas. | Preenche a tabela com colunas incompletas. | Tabela detalhada de transições de estado cobrindo Estado Origem, Gatilho, Guarda e Estado Destino. |
| Entrega no GitHub | Entrega fora da pasta `es-atv-12-estados/`. | Entrega apenas o arquivo markdown sem a imagem `.png`. | Submete `Atividade_12.md` e `Atividade_12.png` no repositório com validação de padrão. |
📊 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. 🛡️🧩
🏗️ Atividade 13: Arquitetura de Software e Padrões
Bem-vindo a mais uma etapa do seu desenvolvimento técnico! Agora que você domina a modelagem de processos e dados, daremos o passo mais importante para quem quer se tornar um desenvolvedor sênior ou gestor técnico: projetar a arquitetura interna do software. Hoje, aprenderemos a organizar sistemas profissionais em camadas usando o padrão MVC (Model-View-Controller) corporativo com Java 17, Spring Boot 3.5.x, Thymeleaf e HTMX, além de aplicar o padrão de projeto criacional Factory. 🛡️🧩