Você está na página 1de 31

Codificao de Mquina de Estados Finitos

A maior parte desse material foi tirada do artigo Using finite state machines to design software, disponvel no site http://www.embedded.com/design/testissue /216200597/

Introduo
Quando criando um software novo, muitos programadores preferem iniciar a codificao sem qualquer planejamento formal prvio A experincia os tem convencido de que pode no existir um mtodo de projeto apropriado para seu projeto Qualquer planejamento formal desperdia muito tempo sem melhoria significativa da qualidade do produto final Entretanto... As preocupaes da engenharia de software e qualidade de software indicam que qualquer mtodo de projeto que seja simples de usar e que ajude a criar cdigo melhor e documentao seriam bem-vindos pela maioria dos desenvolvedores de software

Introduo
Uma abordagem comum atual a aplicao de padres de projeto (design patterns) no planejamento e implementao de projetos de software. Uma mquina de estados finitos um padro de projeto.

Introduo
O tipo de software que melhor aplicada ao modelo MEF so aqueles que tm distintos modos ou os que possuem controle intensivo, ou seja, aqueles que possuem uma estrutura lgica complexa

Definio Informal
MEF pode ser informalmente definida como qualquer dispositivo (eletrnico, mecnico, ou s conceitual) que aceita um nmero finito de entradas e pode produzir um nmero finito de diversas sadas. Um requisito chave que o dispositivo deve ter alguma memria interna que possibilita lembrar de sequncias de entradas de tal forma que as sadas no sejam somente dependentes da combinao de valores de entrada mas tambm da ordem no qual eles foram aplicados.

Introduo
Vantagens de usar padres de projeto MEF
aplicvel a uma grande variedade de projetos de software Pode ser usado em muitos estgios do desenvolvimento, desde projeto de alto nvel at codificao modular Prov uma estratgia rigorosa mas que resulta em uma estrutura de cdigo simples e consistente Cria uma documentao (til principalmente na manuteno) que reflete a organizao do cdigo Incorpora uma ferramenta de depurao efetiva com mnimo esforo Facilita o projeto cooperativo e reviso em pares

Introduo

Um cadeado de corrente de bicicleta abrir quando os trs dgitos forem colocados de acordo com a senha numrica. No importa a ordem de colocao dos dgitos. Este dispositivo no precisa de memria. Consequentemente, no uma MEF, mas somente um dispositivo combinacional.

Introduo

Um cadeado escolar (de nico dgito) s abre se os trs nmeros corretos forem entrados na sequncia correta. O manuseio do cadeado pode gerar duas sadas: aberto ou fechado. Ele gera sinais desbloqueio ou bloqueio para a manilha de comandos. O cadeado tem a habilidade de lembrar-se da ordem de entrada do nmeros. um bom exemplo de uma MEF, que so tambm chamadas de mquinas sequenciais.

Introduo
Nada pode ser sabido a respeito do trabalho mecnico do cadeado Algum pode conceituar que deve ter algumas configuraes internas (ou estados) gerados de certas entradas e que so tambm dependentes da histria dos valores entrados Um estado pode ser pensado como o encapsulamento (ou resumo) de uma sequncia especfica de entradas passadas. Duas ou mais sequncias de entrada podem mapear para o mesmo estado

Introduo
Outro exemplo Um telefone pode ser considerado uma MEF Quando o recebedor escolhido para iniciar uma conversa, um tom de discagem ouvido. O estado pode ser chamado tom de discagem. Aps uma sequncia apropriada de dgitos serem entrados e o receptor atende a ligao, o estado trocado para falando Neste ponto, entrando mais dgitos modificar a sequncia de entrada mas o estado falando permanecer o mesmo.

Introduo

Substituindo o exemplo do cadeado por uma verso eletrnica, que controla uma trava atravs de um teclado numrico. O teclado o dispositivo de entrada e a trava o dispositivo de saida.

Introduo
Assuma que a combinao para desbloquear seja 4-9-1 e que inicialmente o dispositivo esteja bloqueado. O dispositivo est no estado inicial (apesar de no se saber nada sobre o estado das portas, flip-flops, ou outros componentes). O estado inicial implica que o dispositivo espera o primeiro dgito correto. Aps pressionar o 4, o dispositivo reconhece o inicio de uma sequncia correta e reage criando um novo estado aceitou primeiro dgito. Apesar disso a trava continuar bloqueada. Se o 9 pressionado depois, o novo estado pode ser chamado aceitou primeiro e segundo dgitos com a trava ainda bloqueada. Finalmente, quando pressionar o 1, a fechadura emitir um sinal para a trava desbloquear e o sistema reverte internamente para o estado inicial para no gerar estados desnecessrios.

A very crucial point about this example is that the states are abstract notions that allow one to conceptualize a design, even though it may be totally unrelated to the actual implementation of the latch. In fact, it may not be known if the internals of the device are mechanical, electronic, or operate by magic.

Um ponto crucial neste exemplo que os Um ponto crucial neste exemplo que os estados so noes abstratas que permite estados so noes abstratas que permite um projeto conceitual. Dessa forma, o um projeto conceitual. Dessa forma, o projeto pode ser totalmente desvinculado projeto pode ser totalmente desvinculado da implementao real da fechadura. da implementao real da fechadura.

Introduo

Introduo

Digitao errada sempre volta para o estado inicial. Aps destravar sempre volta para o estado inicial.

A descrio do dispositivo pode ser formalizada pela Tabela de Transio de Estados (TTE). Para uma dada combinao de entrada e estado atual, cada clula mostra o prximo estado e uma lista de aes ou sadas. Em projetos mais complexos, cada clula pode listar mais de uma ao.

Introduo

Altere o projeto anterior para incluir a Altere o projeto anterior para incluir a tecla especial # para travar a tecla especial # para travar a fechadura. Reescreva a Tabela de fechadura. Reescreva a Tabela de Transio de Estados. Transio de Estados.

Introduo
Por que no desenhar um diagrama de estados? Qualquer grfico contendo muitos estados e transies podem rapidamente tornar-se complexo e confuso. Isto verdade se um diagrama precise usar muitas pginas ou telas de computador. No existe padro de ordem de desenho; alguns comeam da esquerda para a direita e de cima para baixo; outros do centro da pgina e cresce em todas as direes, tornando difcil encontrar uma lgica. Diagramas podem no ter uma aparncia consistente em diferentes computadores por causa das ferramentas ou configurao de tela usados para visualizao. Grficos so mais difceis de editar e manter do que tabelas. Dessa forma, diagramas de estado podem falhar em manter atualizado com o projeto e alteraes no projeto pelo ciclo de vida do projeto. Pode at cair em desuso, tanto na documentao quanto como ferramenta de manuteno A conexo entre o diagrama de estado e o cdigo correspondente no sempre bvia.

Introduo
S que... A proposta gerar uma tabela de transio de estados, a qual mapeia diretamente na estrutura do cdigo

Isto no normalmente possvel em C (ou outra linguagem de programao). Mas pode ser facilmente resolvida pela troca da estrutura SWITCH com uma srie de instrues IF e ELSE IF tal que: IF((State==A) && I(NPUT==4)) e assim por diante; ou uma funo pode ser criada que retorne algum valor combinado de State e Input.

Debug
A 5a. Linha do cdigo fonte inclui a instruo IF(Debug) write Input, State que cria um trace de estados e entradas, tanto na tela quanto em arquivo, quando o flag Debug estiver setado Esta sequencia de estados e entrada revela o que acontece no cdigo e deve confirmar a afirmao que o paradigma MEF pode incorporar ferramentas de depurao somente pela adio de uma simples linha de cdigo A facilidade de depurao pode ser melhorada pela listagem da ltima sada No caso de aplicaes de tempo-real, onde escrita em impressora ou arquivo pode gerar impreciso temporal, pode-se armazenar o estado e varives de entrada em um buffer de memria para viso posterior Ambas as melhorias requerer um pouco de cdigo adicional que muitos programadores so capazes de solucionar

Mquina de Mealy

Mquina de Mealy

Exemplo 1

enum enum void void void void

State {Locked, Unlocked}; Event {Pass, Coin}; Unlock(); Lock(); Thankyou(); Alarm();

case Pass: Alarm(); break; } break; case Unlocked: switch(e) { case Coin: Thankyou(); break; case Pass: s = Locked; Lock(); break; } break; } }

void Transition(Event e) { static State s = Locked; switch(s) { case Locked: switch(e) { case Coin: s = Unlocked; Unlock(); break;

Exemplo 2

Mquina de Moore

Você também pode gostar