Mini tutorial de Máquina de Estado (State Machine) - Parte 1

rubik Máquina de Estado é uma técnica usada na eletrônica digital para a construção de circuitos digitais, inclusive a unidade de controle de um microprocessador é projetada seguindo este modelo. Como tenho formação de engenharia eletrônica aprendi esta técnica inclusive construindo circuitos com EPROM para a determinação de condições.

Mas o que isso tem a ver com programação?

No dia-a-dia, havia algumas situações complexas que eu vi que aquilo que eu aprendi na faculdade poderia me ajudar na resolução de problemas de lógica.

Este post irá introduzir o conceito e em um próximo post irei demonstrar como utilizar em programação através de exemplo.

Existem várias formas de representar máquina de estado, inclusive a UML tem um diagrama de transição de estados. Além de diagrama, também pode-se representar na forma de tabela. No nosso mini tutorial, vou utilizar uma anotação, na forma de diagrama, mais simples que o da UML.

Exemplo de diagrama:

estados

Os círculos com os números dentro indicam os estados (pode-se usar palavras ou letras no lugar dos números), no nosso exemplo temos 3 estados numerados de 1 à 3.

As setas são as transições de estados, elas são acompanhadas de um rótulo que mostra a Condição / Ação. Quando não há ação, está é omitida.

O círculo pintado indica qual é o estado inicial, no nosso exemplo, está indicando que o estado inicial é o “1″. A transição inicial (seta deste círculo pintado para a primeiro estado) é dito que é instantâneo e não apresenta condição, mas pode conter uma ação.

O círculo pintado com outro círculo em volta indica o encerramento da máquina de estado.

Vamos a um exemplo:

aberto_fechado

Imagine aqui uma gaveta de um aparelho de CD, temos um único botão chamado Open/Close, ela estando aberta, apertando o botão ela fecha, estando fechada, apertando o botão ela abre. É exatamente isso que o diagrama representa.

Para facilitar o entendimento coloque o ponteiro do mouse sobre o estado inicial (círculo pintado). Temos a transição instântanea para o estado aberto, corra com o mouse sobre a elípse “Aberto”. Você ficará com o mouse parado ai, até que a condição “Botão pressionado” seja satisfeita.

Imaginando que alguém apertou o botão: será executado a ação “Fechar” e você correrá com o ponteiro do mouse para o estado “Fechado” e ficará ai até a condição “Botão pressionado” seja satisfeita.

Novamente o botão foi apertado: será executado a ação “Abrir” e o você correrá com o ponteiro do mouse para o estado “Aberto” e ficará ai até a condição “Botão pressionado” seja satisfeita.

O cíclo se repete.

Nesse exemplo simples, não temos o estado de encerramento.

No próximo post abordarei um exemplo mais complexo e mais real.

Mais informações sobre Máquina de Estado:

1 Resposta para “Mini tutorial de Máquina de Estado (State Machine) - Parte 1”


  1. 1 Douglas Cunha

    Se eu tivesse lido isso a mais tempo teria facilitado e muito várias implementações que eu fiz, inclusive usando esse conceito sem saber, achando que tava inventando algo. Pelo que percebi, as possibilidades de aplicação são incontáveis.
    Abraço.

  1. 1 Mini tutorial de Máquina de Estado (State Machine) - Parte 2 de DevelopeZ
  2. 2 Validando endereço de e-mail com máquina de estado de DevelopeZ
  3. 3 Máquina de Estados - Provando a praticidade de DevelopeZ

Deixe uma Resposta