• Nenhum resultado encontrado

Algoritmo 43: FBE escrita com código Framework

5.1 CONCLUSÃO

Este trabalho teve como objetivo principal a evolução do estado da técnica do PON no tocante a questões de desempenho e facilidade de programação por meio da criação de uma linguagem para o PON e da criação de um compilador baseado em tal linguagem. Para tanto, inicialmente tanto o PON quanto a sua materialização na forma de software (e.g Framework) e hardware foram detalhados. Posteriormente, o presente trabalho contou com a definição do conceito de compiladores e ferramentas de compilação necessárias para criação de tal linguagem e compilador. Ainda, fez-se necessária a apresentação da linguagem com seus detalhes e definições bem como as características definidas para o compilador.

A linguagem PON se apresenta ao desenvolvedor como uma alternativa para o desenvolvimento de aplicações sob o viés desse paradigma. Essa linguagem foi criada com o intuito de abstrair as características do PON em uma gramática apropriada. A partir deste momento, o desenvolvedor precisa somente conhecer a linguagem para poder criar aplicações e não se ater as características de componentes e associações como foi até então com a utilização do Framework.

Uma vez definida a linguagem fez-se necessário a criação de um compilador para a mesma. O compilador PON foi criado com o objetivo de evoluir o estado da técnica do PON com a criação de código a partir de uma linguagem PON previamente estabelecida. Para isso, tal compilador foi construído com o intuito de gerar código PON equivalente para três formatos. O primeiro formato tem como resultado o código para o atual Framework Otimizado do PON (versão 2.0). Ainda, os resultados do compilador contaram com a geração de código para C e C++. Estes, por sua vez, foram criados para validar se o compilador PON poderia ter uma

evolução com relação ao seu estado da técnica no tocante a desempenho (e.g. tempo de processamento).

Para validar a evolução do estado da técnica do PON, com o advento do seu compilador, estudos comparativos foram realizados. Duas aplicações foram criadas, sendo a aplicação denominada Mira ao Alvo e a aplicação de Vendas. Os estudos comparativos focaram em questões de desempenho e facilidade de programação.

No tocante a desempenho foi possível perceber que o código gerado pelo compilador para linguagem C apresentou os melhores resultados relacionado a tempo de processamento. Isto se deve ao fato do código em PON C ter uma complexidade menor quando comparado aos demais. Conforme foi possível visualizar na avaliação do código em Assembly gerado o código do compilador em C foi o que apresentou o menor número de linhas de código e consequentemente a menor complexidade o que confirma o seu baixo consumo de tempo de processamento. A versão do código específico PON em C apresenta os conceitos de estruturas (i.e. struct) e funções que são chamadas conforme o processo de inferência do PON requer. A versão em C contempla para cada elemento do tipo

FBE a criação de um Header (.h) e um arquivo (.c) que implementa os

procedimentos e as funções pertinentes àquele módulo. No entanto, independente da aplicação, alguns arquivos são genéricos, os quais representam as Rules, as

SubConditions e Premisses. Deste modo, por mais complexo que seja a aplicação

desenvolvida em PON o código gerado em PON C aumentará somente no número de elementos que representam as FBEs o que concentra a chamada de funções pelo processo de inferência somente em determinados arquivos evitando assim o

overhead em chamadas de funções.

O código do compilador para C++ apresentou resultados insatisfatórios quando comparado ao código em C. É importante salientar que o código do compilador para código específico PON em C++ apresenta os conceitos de classes que representam os conceitos PON, relativos a FBE, Rule e Premise, bem como faz uso de alocação dinâmica de objetos. Ainda, é possível constatar que o código PON em C++ apresenta mais arquivos de código fonte que o código PON em C. Sendo assim, o processo de inferência do PON aplicado ao código PON em C++ realiza chamadas de funções em classes espalhadas em diferentes arquivos. Isto, de fato, pode ocasionar a sobrecarga em chamadas de métodos. Outra observação importante é relacionada ao fato do código em PON C++ fazer uso de alocação

dinâmica de objetos. Isto contribui para aumentar o gasto de tempo de processamento. Deste modo, isto justifica o fato da versão em PON C++ apresentar um resultado menos satisfatório quando comparada a versão PON em C. Por outro lado, a versão em PON C++ obteve resultados de desempenho satisfatórios quando comparado ao resultado em Framework.

Por sua vez, o Framework PON em C++ em termos de desempenho obteve resultados insatisfatórios quando comparado a versão de código específico PON em C e em C++. Isto é devido ao fato do Framework PON C++, conforme relatado em trabalhos anteriores, apresentar algumas desvantagens de implementação, como a sobrecarga de usar uma estrutura de dados computacionalmente cara, devido ao fato de ser genérica, e ser desenvolvido sob uma linguagem intermediária, no caso o C++.

Quando comparado os resultados do compilador PON com os resultados das aplicações equivalentes construídas em PI/POO C++, os resultados para o código do compilador em C ainda obteve os resultados mais satisfatórios sendo seguido dos resultados do código do compilador em C++. Isto é devido, como salientado anteriormente, a versão em PI/POO C++ ser desenvolvida com as características da orientação a objetos como a representação do conhecimento através de classes e a utilização de alocação dinâmica de objetos. Isto de fato contribui no aumento do tempo de processamento conforme discutido na versão em PON C++. Por outro lado, a versão em PI/POO C++ se mostrou, de certa forma, equivalente a versão em PON C++ tendo seu resultado razoavelmente pior. Isto se deu ao fato das versões serem, de certa forma equivalentes, com relação a utilização de conceitos de OO e pelo fato da PI/POO C++ não se utilizar dos conceitos do PON em sua concepção.

No tocante a facilidade de programação é possível perceber que a linguagem PON até o momento se apresenta de forma mais simplificada quando comparada ao Framework PON. Os estudos comparativos sobre complexidade de código demonstram tal simplicidade e os relatos dos pesquisadores do PON confirmam que a linguagem converge para ser uma alternativa para programar em PON que apresente mais produtividade.

Portanto, como foi possível notar com os resultados obtidos, pode-se concluir que a linguagem e compilador PON convergem para a melhoria do estado

da técnica do PON, no tocante a desempenho, e se apresenta como uma alternativa para o desenvolvimento de aplicações sob o viés desse paradigma.