Os recém-chegados ao formalismo da máquina de estado confundem frequentemente diagramas de estado com fluxogramas. A figura abaixo mostra uma comparação de um diagrama de estados com um fluxograma. Uma máquina de estados (painel (a)) executa acções em resposta a eventos explícitos. Em contraste, o fluxograma (painel (b)) não precisa de eventos explícitos mas sim de transições de nó para nó no seu gráfico automaticamente após a conclusão das actividades.
Nós de fluxogramas são arestas no gráfico de estados induzidos.A razão é que cada nó num fluxograma representa um comando de programa.Um comando de programa é uma acção a ser executada.Assim, não é um estado, mas quando aplicado ao estado do programa, resulta numa transição para outro estado.
Em mais detalhe, a listagem do código fonte representa um gráfico do programa. A execução do gráfico do programa (analisando e interpretando) resulta num gráfico de estados.
O gráfico do programa é uma sequência de comandos. Se não existirem variáveis, então o estado consiste apenas no contador do programa, que mantém o registo de onde no programa estamos durante a execução (qual é o próximo comando a ser aplicado).
Neste caso, antes de executar um comando, o contador do programa está em alguma posição (estado antes de o comando ser executado).Uma vez que o contador do programa é o estado completo, segue-se que a execução do comando alterou o estado.Assim, o próprio comando corresponde a uma transição entre os dois estados.
Agora considere o caso completo, quando as variáveis existem e são afectadas pelos comandos do programa que estão a ser executados.Então, entre diferentes localizações do contador do programa, não só o contador do programa muda, mas também as variáveis podem alterar valores, devido aos comandos executados.Consequentemente, mesmo se revisitarmos algum comando do programa (por exemplo, num loop), isto não implica que o programa esteja no mesmo estado.
No caso anterior, o programa estaria no mesmo estado, porque todo o estado é apenas o contador do programa, por isso, se o programa apontar para a mesma posição (comando seguinte), basta especificar que estamos no mesmo estado.Contudo, se o estado incluir variáveis, então se estas mudarem de valor, podemos estar na mesma localização do programa com diferentes valores de variáveis, ou seja, num estado diferente no espaço de estados do programa. O termo “desdobramento” tem origem nesta multiplicação de localizações ao produzir o gráfico de estados a partir do gráfico do programa.
Um exemplo representativo é um laço que incrementa algum contador até transbordar e tornar-se novamente 0.Embora o laço execute o mesmo comando de incremento iterativamente, o gráfico do programa executa um ciclo, no seu espaço de estados não é um ciclo, mas uma linha. Isto resulta do estado ser a localização do programa (aqui ciclo) combinada com o valor do contador, que está estritamente a aumentar (até ao transbordo), pelo que diferentes estados são visitados em sequência, até ao transbordo.Após o transbordo, o contador volta a ser 0, pelo que o estado inicial é revisitado no espaço de estados, fechando um ciclo no espaço de estados (assumindo que o contador foi inicializado a 0).
A figura acima tenta mostrar essa inversão de papéis alinhando os arcos dos diagramas de estados com as fases de processamento do fluxograma.
P>É possível comparar um fluxograma com uma linha de montagem na fabricação porque o fluxograma descreve a progressão de alguma tarefa do princípio ao fim (por exemplo transformando a entrada do código fonte em saída de código objecto por um compilador). Uma máquina de estado geralmente não tem noção de tal progressão. A máquina de estado da porta mostrada no topo deste artigo, por exemplo, não está numa fase mais avançada quando está no estado “fechado”, em comparação com estar no estado “aberto”; simplesmente reage de forma diferente aos eventos de abertura/fecho. Um estado numa máquina de estado é uma forma eficiente de especificar um determinado comportamento, em vez de uma fase de processamento.