terça-feira, 12 de maio de 2015

Hardcore Devel #16 - Máquinas de Estado

Em ciência da computação, uma das coisas mais estudadas são as máquinas de estado. Elas são as formas mais simples de máquinas que formalizam os algoritmos. O grande lance é que elas são muito subestimadas, até por nós mesmos programadores que somos estudantes dessa ciência.

Esse é o Hardcore Devel de hoje.



Na verdade eu não sou a primeira pessoa a falar sobre máquinas de estado. Existem diversos artigos pela internet que falam a respeito disso. E não estamos falando de máquinas de estado apenas na teoria. Estamos falando de programar utilizando esses conceitos.

E sim, isso é perfeitamente possível. Na verdade, as máquinas de estado servem exatamente pra isso. Um autômato finito sem memória, sem auxílio já é capaz de processar expressões regulares! Expressões regulares já fazem coisas incríveis em termos de programação. Buscadores com expressões regulares são extremamente poderosos.

Esse conceito na verdade é utilizado em muitas outras áreas. Protocolos de comunicação de rede são escritos como máquinas de estado, mesmo tendo algumas pequenas diferenças especiais de notação.

Os estados de uma aplicação muitas vezes são também mapeáveis no mesmo tipo de conceito. A própria MinArena tem esse tipo de coisa. Se você pensa a nível de interface gráfica, você pode pensar que cada estado representa um painel diferente. E que obviamente pode te levar a lugares diferentes também.

Objetos em UML seguem o mesmo princípio. Na verdade você pode tratar cada objeto da sua aplicação como uma máquina de estado, e isso é mais comum do que se imagina. A analogia geral é a seguinte: Os estados de um objeto são as características / atributos em um determinado momento. A mudanças de estado são feitas através dos métodos do objeto. Estes são similares a ações de transformação.

Mas não superestime o conceito. Máquinas de estado resolvem bastante coisa mas não são capazes de resolver todos os problemas do mundo, e as vezes só tendem a complicar a solução de um problema simples com um conceito complexo.

De qualquer forma, é um assunto que vale a pena estudar.

Nenhum comentário:

Postar um comentário