🚀 Engenharia de Software

Diagrama de Máquina de Estados (UML)

(Mapeando a Trajetória, Gatilhos e a Evolução Biológica dos Dados)

👨‍🏫 Professor: Ricardo Pires
📚 Unidade IV


🚦 A Mutação da Memória e a Estabilidade de Vida

Enquanto os Casos de Uso mapeiam o desejo e a Sequência crava o relógio temporal implacável do fluxo de comunicação, o Diagrama de Máquinas/Grafos de Estado dá um passo atrás de forma humilde.

Ele agarra UM mero único e misero objeto (Ex: Pedido num App de Delivery), retira o universo visual à sua total volta, e olha cirurgicamente e intimamente para ele focado. Qual o sofrimento de mutação biológica daquele Pedido até virar pó e ir pro lixo (Finalizado)?

(Pedidos do IFood não duram estáticos. O Entregador não “surge na casa com pizza”. Ele engatilha “Pendente”, engatilha “Preparando Forno”, engatilha…)


🧊 Componente Angular: O Cativeiro do “Estado Atual”

Na UML oficial, as Caixas de Arredondamento Suave delimitam a situação.

[ Estado: AGUARDANDO_PIX_DA_COMIDA ]

  • A regra inviolável: O Objeto dentro desta dimensão está em passividade restrita. O Aplicativo ali dorme em espera infinita amarrado no caixão, até que você, o Universo Exterior do Sistema, efetue o Push Action matemático para chutá-lo na flecha fora dali!

Se o programa estourar erro de “Ifs” e chutar essa embalagem para longe antes da confirmação do Banco, é o caos absoluto da máquina sem trilhos (Uma falha arquitetural fatal).


⚙️ Vida Celular Interna (A Magia de Borda Oculta)

Não pense que a caixa [Processando] é 100% morta inerte! O estado executa eventos em 3 portões paralelos programáticos:

  1. 🟢 Entry Trigger (A Catraca Verde Oculta): Executa num milionésimo de instante ao “pular o muro pro estado entra”. (Exemplo: Tocar o Sino (Ping!) do celular e mandar Notificação Web assim q a pizza entrar no módulo forno entry/ DispararPushFirebase() ).
  2. 🔄 Do Execution (A Esteira Diária do Processo Central): Trabalha de forma sudorenta enxuta infinita batendo pernas pesadas equanto lá jaz prisioneiro. (Ex: do / GirarAnimaçãoDeVentoinhaSpinnerNaCloud ()).
  3. 🔴 Exit Trigger (A Fuga Final): Desligue as luzes e queime provas milisegundos antes do objeto dar tchau sumindo na porta. (Exemplo: exit / FecharConexaoSoqueteTensionada()).

🏹 Flechadas de Transportes Mutativos: “Transições”

As setilhas laterais da transição não são apenas uma linhazinha. Elas requerem passaporte autenticado e força cinética: (O Gatilho Ocasional + Condição Seleta [Guarda de Fronteira] / Evento Processual Efeito).

Visualizem o Portão Digital Armado:

[ Estado: Motor de Carro Desligado ]

                  │   Gatilho   [Guarda Secreta e Forte] / Consequência Letal

       Girar_Chave [Se Alarme_AntiFurto for FALSE] / Ativar_Bomba_de_Injeção()


[ Estado: Motor Funcionando Aberto Em Rotações RPM ]

(Se o Alarme estivesse ligado (Verdadeiro), a seta “Bate Falso na Guarda entre colchetes” e é expulsa rejeitada do portão, voltando pra inatividade apagada).


🏁 Componentes Circulares Extremos e Singulares

Por restrição da UML de Máquinas, você não adivinha o momento da reencarnação existencial sem os Balizas Iniciais (Não se joga caixas aos ventos cósmicos na tela em branco da folha).

  • Origem ou Nascimento Gênesis (Bólido Preenchido Maciço Puro): Indica do além, o buraco inicial pelo qual a Obra Abstrata desponta encarnando-se nas tabelas para iniciar jornada do ponto zero. O “Criador Início”.
  • 🎯 A Lixeira do Oblívio Final (Anel de Círculo Preenchido “Alvo Central”): Marca o enterro perpétuo e sumiço dos metadados de ciclo útil de processamento de um pedido ou ordem extinta, a “Morte Pacífica Fim de Script”, limpando-se do Garbage Collector na RAM ativa.

🗣️ QUIZ VERBAL: Quebrando as Engrenagens do “Fazer Contínuo” da Máquina de Rotação!

Cenário do Colapso Industrial Moderno: Olhe a engenharia da “Lavadoura Smart 5G Brastemp”. O Microchip Java dela encontra incansalmente no ciclo de estado focado intenso: [ STATE: Centrifugação Rápida_Violenta ]. Lá dentro roda em loop o evento de atrito bruto (DO / TorqueEmaranhado_GiroMaximoSecagem) por 10 minutos. Subitamente no ápice magnético dos 5 minutos vitais, uma criança levanta a tampa de vidro protetora (Quebra e disparo instintivo de Transistor Externo: Tampa_Rupturada()).

No micro-código elétrico projetado com UML correta de grafos, qual Ação imediata o sistema executa na Máquina? E o que diabos ocorre matematicamente com trabalho cíclico suado da esteira interna (DO / GiroMaxTorque) que operava na caixa anterior?


✅ RESPOSTA DO QUIZ

Arrasto Violenta Instantânea de Morte Celular Transicional + Estado Novo de [Pausa de Perigo] ⏹️🧊

Análise Robótica Explícita: O Evento externo acionado atirou flechada letal não blindada. O Estado perde imediatamente o “Host” (Corpo) para as garras afiadas em direção ao Estado destino “Paralisação de Prevenção/Falha Alerta Inoperante” de proteção motora física por segurança UML. Com essa “deportação súbita de estado de caixa contígua”, as rotinas pesadas emuladas dentro bloqueadas pela aba “DO/GiroMaximo” sofrem Extermínio Rápido Abortivo Suspenso Imediato (“Kill Thread”). Ficam congeladas sem clemência por perda de domicílio físico processual base. Nunca uma CPU executa ritos “DO” de caixas esquecidas onde se recusa a atuar ativamente na raiz lógica.


📐 Matemática de Estados: Número de Transições Possíveis

Um Diagrama de Máquina de Estados com estados distintos pode ter no máximo:

transições direcionadas (de qualquer estado para qualquer outro, exceto si mesmo).

Exemplo — Pedido de Delivery (5 estados): PendenteAceitoEm PreparoEm EntregaFinalizado

Mas o diagrama real permite apenas 7 transições válidas (fluxo linear + cancelamento). As outras 13 são estados inacessíveis bloqueados pelas guardas [condição] — o que garante consistência!


🗣️ QUIZ VERBAL: A Transição Ilegal

Cenário (iFood): O sistema de pedidos possui os estados: [Pendente][Aceito pelo Rest.][Em Preparo][A caminho][Entregue]

Um dev Jr. implementou por engano uma transição direta que permite que um pedido pule do estado [Pendente] diretamente para [A caminho], sem passar por [Aceito] e [Em Preparo].

Qual o impacto operacional dessa transição inválida no mundo real? E qual seria a guarda (condição entre colchetes) correta que deveria bloquear essa transição?


✅ RESPOSTA DO QUIZ FINAL

Transição inválida = caos operacional: entregador buscaria pedido não preparado. 🚑

Impacto real:

  • O entregador receberia uma notificação de coleta sem o restaurante ter confirmado nem iniciado o preparo.
  • O cliente veria “pedido a caminho” para uma pizza que ainda não foi ao forno.
  • Gera devoluções, recussões e queda de rating do restaurante.

A guarda correta na transição Aceito --> A caminho:

[Aceito] --Saiu_Para_Entrega [se status_preparo == "CONCLUIDO"]--> [A caminho]

Sem essa guarda, a máquina de estados permite transições fisicamente impossíveis no domínio do negócio.


🎯 Por que Não “Entulhar Tudo em IFs de Verificação?”

Entendam o Desespero: Sem as Máquinas de Estado engessadas e protegidas, Sistemas Operacionais fariam programadores de 1º Período criar gambiarras “Monstro” soltas (If pedido.Pago And pedido.JaFoiEnviado and pedico.NaoCancelou and Cliente.Fez...).

A Matemática visual das Bolhas estanca atrocidades biológicas na plataforma. Evita-se arquiteturalmente no esqueleto mestre um Cliente Acionar no FrontEnd Realizar Devolução por Quebra Física e Assinar Comprovante estando ainda na porta e status preso na caixa de [ Aguardando Envio do Lojista Chinês ]. Os estados blindam temporalmente a loucura!