Simulador de uma "Coke Machine"
utilizando
Teoria dos Autômatos
Anderson de Rezende Rocha,
Flávio Luiz Alves,
Júlio César Alves,
Rodrigo Nazaré da Silva Leite
Disciplina: Linguagens Formais e Autômatos
Prof.: Jones Oliveira Albuquerque
Coke Machine Simulator
Introdução

Aplicando os conceitos básicos da Teoria
dos Autômatos, procuramos simular, neste trabalho,
uma "Coke Machine”.

O funcionamento tanto da máquina física
quanto da máquina simulada seguem a mesma
premissa: receber moedas, disponibilizar refrigerantes e
voltar troco.
O problema
Representação da máquina como um autômato:
 O problema consiste em traduzir as operações e os estados
de uma máquina real para um autômato, mais precisamente
uma Máquina de Moore.
 Dado que um autômato consiste de um conjunto de
estados, um alfabeto e uma função de transição, partimos
para a representação da Máquina de Coca-Cola neste
contexto.
A ligação da teoria com a prática
O alfabeto consiste em todas as ações que o usuário pode realizar
na máquina, tais como: inserção de moedas, requisição de troco e
de refrigerantes, bem como, a ação de pegar os mesmos.
Os estados consistem nos estados reais que a máquina pode
assumir, tais como: quantidade de dinheiro, falta de dinheiro,
liberação de refrigerantes, etc.
A função de transição consiste na relação entre cada ação que o
usuário pode executar com cada estado que máquina pode
assumir.
Um exemplo:
Uma primeira abstração...
Partindo do que foi dito, pensamos, primeiramente, em
solucionar o problema de modo direto, com a utilização de uma
matriz estados por alfabeto.
Por um lado, esta seria uma boa abstração, uma vez que, a
matriz seria completa, ou seja, todo estado tem produção para
qualquer símbolo do alfabeto.
Entretanto, esta seria uma solução dependente deste problema, o
que limitaria a reusabilidade do trabalho.
A idéia implementada
Deste modo, resolvemos implementar um autômato finito
genérico, ou seja, um autômato útil para qualquer problema
inerente a ele. A solução do problema está, então, numa aplicação
especializada que utilizaria o autômato desenvolvido.
A idéia implementada
A nível de implementação pensamos na representação de
um autômato por um conjunto de estados e pela função delta
(consumir um símbolo).
O estado, seria representado por uma mensagem de
saída (Máquina de Moore), um conjunto de ligações para outros
estados e uma identificação de estado final ou não. Já a ligação
entre um estado e outro teria um símbolo a ser consumido e
uma referência ao estado de destino.
E, por fim, o autômato é template em relação ao
alfabeto, ou melhor, o alfabeto pode ser definido pelo usuário da
classe autômato.
A idéia implementada
Partimos, então, para a implementação da Máquina de
Coca-Cola® propriamente dita.
Para isso criamos uma classe clSimbolo (representação
do Alfabeto) que abstrai as ações de um usuário em relação à
máquina. Além de, é claro, modificarmos a base de dados para
este problema.
Interface do
programa
Conclusões
Concluímos que o mais interessante neste trabalho foi a
implementação do autômato genérico, uma vez que a Máquina de
Coca-Cola® é apenas uma instância do mesmo.
Vimos, então que nosso trabalho é reutilizável para outros
fins, bastando mudar as classe de aplicação e de definição do
alfabeto, além da base de dados.
Sugestões para trabalhos futuros:
Implementação de um autômato que unifique a abordagem
das máquinas de Mealy e de Moore, diminuindo o número de
estados (espelhos).
O autômato poderia ser modificado de modo que as
mensagens de saída (Moore) fossem templates, permitindo maior
liberdade de representação das saídas
Referências
i) MENEZES, Paulo Blauth. "Linguagens Formais e Autômatos", ed.
Sagra Luzatto, RS - Brasil.
ii) SUDKAMP, Thomas. "Languagens and Machines", ed. Addison
Wesley, USA.
iii) Documentação da biblioteca wxWindows [www.wxwindows.org]
Download

cokeMachine