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]