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:
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:
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:
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.