Módulo 12 - Máquinas de estado: estados, transições e eventos

Modelar um semáforo: estado atual mais evento

8 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 12/07/2026

O que você vai aprender

  • Modelar o semáforo como um ciclo de três estados.
  • Montar a tabela de transições estado atual, evento e próximo estado.
  • Aplicar a regra de que o próximo estado depende do atual mais o evento.
  • Prever o próximo estado percorrendo as transições.

O semáforo em três estados

O semáforo é o exemplo perfeito porque ninguém tem dúvida sobre como ele funciona. Ele fica verde por um tempo, passa para amarelo, depois para vermelho e volta ao verde. Três estados, uma ordem fixa, um ciclo que se repete. O evento que empurra a máquina é simples: o tempo daquela cor acabou. Repare que o mesmo evento, tempo esgotado, causa efeitos diferentes conforme o estado atual. No verde, o tempo esgotado leva ao amarelo. No amarelo, leva ao vermelho. No vermelho, leva ao verde. Não é o evento sozinho que decide o destino; é a dupla estado atual mais evento.

Essa dupla é o coração de qualquer máquina de estado, e o semáforo deixa isso escancarado. Se alguém pergunta para onde a máquina vai quando o tempo acaba, a resposta certa é uma pergunta de volta: depende, ela está em qual cor agora? Sem saber o estado atual, o evento é ambíguo. Com o estado atual em mãos, o destino é único e previsível. Guardar o estado atual não é um detalhe de implementação; é a memória que dá sentido ao próximo passo. Uma máquina sem memória do estado atual não seria uma máquina de estado, seria só uma reação cega ao evento.

Diagrama circular de três estados do semáforo: um círculo verde no topo, um amarelo à direita e um vermelho embaixo, ligados por setas em sentido horário. A seta de Verde para Amarelo é rotulada 'tempo esgotado', a de Amarelo para Vermelho também 'tempo esgotado', e a de Vermelho para Verde igualmente 'tempo esgotado', mostrando que o mesmo evento leva a destinos diferentes conforme o estado atual.
O ciclo do semáforo: o mesmo evento, tempo esgotado, leva a um estado diferente dependendo da cor atual.

A tabela de transições

Desenhar setas ajuda a ver, mas na hora de programar é mais prático escrever a mesma coisa como uma tabela de transições: para cada par de estado atual e evento, qual é o próximo estado. Do semáforo, a tabela é curta e completa. Verde mais tempo esgotado leva a amarelo. Amarelo mais tempo esgotado leva a vermelho. Vermelho mais tempo esgotado leva a verde. Se uma combinação não aparece na tabela, a máquina não se move, e isso é uma proteção, não uma falha. A tabela vira a fonte única de verdade: mudou a regra, muda-se a tabela, e o resto do código continua igual, só consultando.

Estado atualEventoPróximo estado
VerdeTempo esgotadoAmarelo
AmareloTempo esgotadoVermelho
VermelhoTempo esgotadoVerde

A tabela de transições do semáforo: três regras cobrem o ciclo inteiro.

🎮 Jogo da aula

Para onde vai o semáforo?

O semáforo começa no verde e recebe o evento tempo esgotado três vezes seguidas. Descubra a cor final que o programa mostra.

estado <- 'verde'

// funcao que aplica a transicao do semaforo
função proximo(cor)
  se cor = 'verde' então retorne 'amarelo' fim
  se cor = 'amarelo' então retorne 'vermelho' fim
  se cor = 'vermelho' então retorne 'verde' fim
fim

// tres eventos 'tempo esgotado' em sequencia
estado <- proximo(estado)
estado <- proximo(estado)
estado <- proximo(estado)
escreva(estado)

Quando o semáforo cresce

Semáforos de verdade costumam ter mais nuances, e é interessante ver como a máquina de estado absorve isso sem virar bagunça. Muitos têm um estado de amarelo piscante à noite, que entra por um evento diferente (chegou o horário noturno) e sai por outro (voltou o horário normal). Alguns têm um estado de defeito, alcançado por um evento de falha a partir de qualquer cor. Cada novidade é só um estado a mais e algumas transições a mais na tabela. O esqueleto não muda: continua sendo estado atual mais evento decide o próximo estado. É por isso que o modelo escala bem, de uma catraca de dois estados a controles bem mais complexos.

Teste rápido

No semáforo, por que o mesmo evento tempo esgotado leva a cores diferentes?

Perguntas frequentes

Quantos estados tem um semáforo comum?
O semáforo básico tem três: verde, amarelo e vermelho, num ciclo fixo. Modelos reais podem ganhar estados extras, como amarelo piscante à noite ou um estado de defeito, mas o núcleo são as três cores. Cada estado a mais entra como um nó novo no diagrama e algumas linhas novas na tabela de transições.
Por que o mesmo evento causa efeitos diferentes?
Porque o próximo estado depende do estado atual mais o evento, não do evento isolado. Tempo esgotado no verde manda para o amarelo; no amarelo, para o vermelho; no vermelho, para o verde. Sem saber a cor atual, o evento é ambíguo. Guardar o estado atual é o que torna o próximo passo previsível.
O que é a tabela de transições?
É a lista de todas as regras da máquina no formato estado atual, evento e próximo estado. Ela é a fonte única de verdade: o código só consulta a tabela para saber para onde ir. Uma combinação que não está na tabela significa que nada acontece, o que serve de proteção contra eventos fora de hora.
O semáforo pode pular do verde direto para o vermelho?
Não deveria, e é aí que a máquina de estado protege. Se a tabela só tem verde para amarelo e amarelo para vermelho, não existe transição de verde para vermelho, então esse pulo é impossível por construção. Modelar as transições certas evita comportamentos perigosos, como um sinal que sumisse com o amarelo.
Toda máquina de estado é um ciclo como o semáforo?
Não. O semáforo é cíclico porque volta ao início para sempre, mas muitas máquinas têm um começo e um fim, ou caminhos que se ramificam. A validação de uma senha, por exemplo, tem um estado final de aceito e outro de rejeitado. Ciclo é uma forma comum, não uma regra do modelo.
Como o semáforo sabe quando trocar de cor?
Por um evento, normalmente o fim do tempo daquela cor, medido por um relógio ou temporizador. Quando o tempo acaba, o evento tempo esgotado é disparado e a máquina consulta a tabela de transições para achar o próximo estado. O temporizador é a fonte do evento; a máquina de estado cuida da lógica de para onde ir.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.