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

Estados e transições: a situação que o sistema guarda

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

Velocidade

O que você vai aprender

  • Definir estado como a situação atual que o sistema guarda.
  • Definir transição como a regra que muda de um estado para outro.
  • Reconhecer uma máquina de estado num exemplo do dia a dia.
  • Trocar um emaranhado de if por um mapa claro de estados.

A catraca que só tem duas situações

Pense na catraca da estação. Ela vive em uma de duas situações: travada, sem deixar ninguém passar, ou liberada, esperando uma pessoa cruzar. Não existe meio termo. Cada situação dessas é um estado, e a catraca está sempre em exatamente um deles. O que faz a catraca sair de um estado e entrar no outro? Dois acontecimentos bem definidos. Passar um cartão válido leva de travada para liberada. Empurrar a barra e passar leva de liberada de volta para travada. Cada uma dessas regras é uma transição: uma seta que sai de um estado, é disparada por um evento e chega em outro estado.

O detalhe que faz a máquina de estado ser poderosa é que a reação ao mesmo evento depende do estado atual. Passar o cartão numa catraca já liberada não faz nada de novo, porque não há transição de liberada disparada por cartão. Empurrar a barra de uma catraca travada também não abre nada. O estado atual filtra quais eventos importam. Em vez de um monte de if verificando dezenas de combinações soltas, você descreve um punhado de estados e, para cada um, só as transições que fazem sentido ali. O resto o sistema simplesmente ignora, e essa é a beleza do modelo.

Diagrama de uma máquina de estado da catraca com dois círculos: Travada à esquerda e Liberada à direita. Uma seta curva sai de Travada para Liberada rotulada 'cartão válido'. Outra seta curva sai de Liberada para Travada rotulada 'pessoa passa'. Dois laços pequenos indicam eventos que não causam mudança: empurrar a barra em Travada e passar o cartão em Liberada não movem a máquina.
A catraca como máquina de estado: dois estados (Travada e Liberada) e duas transições, cada uma disparada por um evento.

Por que vale a pena pensar em estados

Quando um programa acumula variáveis soltas de controle (uma marca de logado, outra de carregando, outra de erro, mais uma de pagamento aprovado), a lógica vira um labirinto. Combina-se em if profundos, aparecem situações impossíveis de descrever e nascem bugs esquisitos, do tipo carregando e com erro ao mesmo tempo. A máquina de estado corta esse nó com uma pergunta simples: quais são as situações reais e distintas em que o sistema pode estar? Se você consegue listá-las e desenhar as setas entre elas, ganhou um mapa. O código passa a guardar uma única variável, o estado atual, e a decidir tudo a partir dela.

// Catraca como maquina de estado
estado <- 'travada'

// evento: passar o cartao
se estado = 'travada' e cartaoValido então
  estado <- 'liberada'
fim

// evento: empurrar a barra
se estado = 'liberada' e pessoaPassou então
  estado <- 'travada'
fim

escreva('Agora a catraca está: ', estado)

Uma única variável estado guarda a situação. Cada transição só dispara se estiver no estado certo e o evento certo acontecer.

🎮 Jogo da aula

A vida da catraca

Coloque os passos na ordem em que a catraca vive um ciclo completo, do repouso travado até voltar a travar.

    Estado não é a mesma coisa que dado qualquer

    Vale separar duas coisas que confundem no começo. Uma máquina de estado guarda muitos valores, mas nem todo valor é um estado no sentido do modelo. O saldo de crédito de um cartão, o nome do passageiro ou a hora da passagem são dados que a catraca até pode registrar, e mudam o tempo todo. O estado, no sentido da máquina, é a situação de controle: travada ou liberada. É ele que decide o comportamento, isto é, quais eventos disparam quais transições. A pergunta que separa um do outro é direta: esse valor muda a forma como o sistema reage aos eventos? Se muda, é candidato a estado; se é só informação guardada, é dado comum.

    Teste rápido

    O que caracteriza uma máquina de estado?

    Perguntas frequentes

    O que é, em poucas palavras, uma máquina de estado?
    É uma forma de descrever um sistema pelas situações em que ele pode estar (os estados) e pelas regras que o levam de uma situação a outra (as transições). O sistema está sempre em exatamente um estado, e só muda quando acontece um evento que dispara uma transição. A catraca, com travada e liberada, é o exemplo mais enxuto.
    Qual a diferença entre estado e evento?
    Estado é a situação atual, algo que dura no tempo (a catraca está travada). Evento é um acontecimento pontual que pode disparar uma mudança (passar o cartão). O evento é o gatilho; a transição é a regra que, dado o estado atual, decide para onde ir; e o próximo estado é o resultado. Estado dura, evento acontece.
    Por que trocar um monte de if por uma máquina de estado?
    Porque variáveis de controle soltas se combinam em situações impossíveis e bugs difíceis de achar. A máquina de estado obriga você a listar as situações reais e válidas, garante que o sistema esteja em uma só por vez e descreve, para cada uma, apenas as transições que fazem sentido. O resultado é uma lógica mais clara e mais fácil de testar.
    Um sistema pode estar em dois estados ao mesmo tempo?
    Na máquina de estado clássica, não: o sistema está sempre em exatamente um estado. Se você sente vontade de dizer que ele está em dois ao mesmo tempo, geralmente faltou um estado combinado ou o modelo precisa de mais de uma máquina cooperando. Manter um único estado por vez é justamente o que evita as tais situações impossíveis.
    Toda variável do programa é um estado?
    Não. Só é estado, no sentido do modelo, o valor que muda a forma como o sistema reage aos eventos. O saldo, o nome, a data são dados comuns que o programa guarda. A situação de controle, aquela que decide o comportamento, é o estado. O teste é perguntar se mudar aquele valor muda quais transições fazem sentido.
    Onde eu já uso máquinas de estado sem perceber?
    Em quase tudo que tem modos ou telas: o semáforo, o forno de micro-ondas (parado, cozinhando, pausado), o player de vídeo (tocando, pausado, parado), o campo de formulário (vazio, preenchendo, válido, com erro) e as telas de qualquer jogo. Sempre que houver situações distintas com regras de troca, há uma máquina de estado por baixo.

    Fontes

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