Vous êtes sur la page 1sur 46

MARCELO RODRIGO MARQUEZE

SERVIDOR DE CONHECIMENTO JAVA COM PROLOG

PUC-CAMPINAS 2005

MARCELO RODRIGO MARQUEZE

SERVIDOR DE CONHECIMENTO JAVA COM PROLOG

Trabalho de concluso de curso apresentado como exigncia da disciplina Projeto Final II, ministrada no curso de Engenharia de Computao, na Pontifcia Universidade Catlica de Campinas. Orientador: Prof. Dr. Carlos Miguel Tobar Toledo. Co-orientador: Prof. Andr Luis dos Reis Gomes Carvalho.

PUC-CAMPINAS 2005

BANCA EXAMINADORA

Presidente e Orientador Prof. Dr. Carlos Miguel Tobar Toledo. 2 Examinador Prof. Andr Lus dos Reis Gomes de Carvalho. 3 Examinador Prof. Gustavo Enrique de Almeida Prado Alves Batista.

Campinas, 15 de dezembro de 2005.

AGRADECIMENTOS

A Deus, por guiar meus passos. Ao Prof. Andr Lus dos Reis Gomes de Carvalho, Co-Orientador do meu projeto final. Ao Prof. Dr. Carlos Miguel Tobar Toledo, Por estar sempre disposto a analisar os documentos sobre o projeto final.

A inteligncia... a capacidade de criar objetos artificiais, especialmente ferramentas para fazer ferramentas. Henri Bergson

RESUMO
MARQUEZE, Marcelo Rodrigo. Servidor de conhecimento Java com Prolog. Campinas, 2005. 43f. Monografia de TCC - Curso de Engenharia da Computao, Pontifcia Universidade Catlica de Campinas. Campinas, 2005. Este trabalho se refere a um trabalho de concluso de curso sobre o desenvolvimento de um servidor de conhecimento utilizando a integrao da linguagem Java com o interpretador Prolog. O sistema visa facilitar o desenvolvimento de aplicaes que necessitem a abordagem conjunta dessas duas tecnologias. Atravs desta unio, possvel obter a reduo do cdigo escrito para resoluo de problemas que necessitem a utilizao da programao em lgica sem perder a interao com o usurio atravs de uma interface amigvel. Como metodologia foi utilizada o desenvolvimento incremental que prope a diviso do desenvolvimento em etapas. A avaliao do sistema foi feita atravs do desenvolvimento de um cdigo para solucionar um problema de um autmato finito no determinstico. Para validao comparou-se a soluo obtida com o Java em relao soluo encontrada atravs do Servidor de conhecimento Java com Prolog. Foi atingido o objetivo. Termos de indexao: Servidor de conhecimento, Java com Prolog.

ABSTRACT
MARQUEZE, Marcelo Rodrigo. Knowledge server Java with Prolog. Campinas, 2005. 43f. Dissertao (Graduao)-Curso de Engenharia da Computao, Pontifcia Universidade Catlica de Campinas. Campinas, 2005. This monograph is concerned with the final work necessary for graduation. It is about the development of a knowledge Server, integrating the Java with programming language with a Prolog interpreter. The system aims to facilitate application developments that require the combined approach of these two technologies. Through this union it is possible to obtain code reduction for the resolution of problems that require logic programming without losing user interaction through a friendly interface. The incremental development was used as methodology, which proposes to divide the development into steps. The assessment of the system was done throught the development of a program to solve a problem of a non-deterministic finite-state automatum. For validation, there were compared the solution written in Java with that obtained throught the Java-Prolog server. The main objective was achieved. Terms of indexation: Knowledge server, Java with Prolog.

LISTA DE FIGURAS

SUMRIO

1. INTRODUO.................................................................................................................9 1.1 Caracterizao do problema.......................................................................................13 1.2 Estado da Arte............................................................................................................15 1.3 Organizao da Monografia.......................................................................................15 1.4 Objetivo......................................................................................................................16 O objetivo do desenvolvimento do servidor de conhecimento Java com o Prolog foi diminuir a quantidade de linhas de cdigo fonte para uma aplicao que exige ambos os paradigmas........................................................................................................................16 2. METODOLOGIA..............................................................................................................9

3. DESENVOLVIMENTO..................................................................................................24 4. RESULTADOS................................................................................................................27 4.1 Testes dos Mdulos Desenvolvidos. .........................................................................30 4.2 Avaliao ...................................................................................................................33 4.3 Validao ...................................................................................................................35 5. CONCLUSO.................................................................................................................27 6. REFERNCIAS...............................................................................................................39

1. INTRODUO

O trabalho apresentado visa contemplar a criao de um servidor TCP multi-usurio a fim de possibilitar mltiplas consultas a uma base de conhecimento Prolog, consulta esta feita atravs de classes e mtodos desenvolvidos em Java, com a finalidade de realizar a transio entre a linguagem Java e o Prolog. Tal trabalho possui alta interdisciplinaridade ligada rea de inteligncia artificial, devido ao uso da linguagem de programao

lgica, o Prolog, utilizao do conceito de orientao a objetos, atravs da linguagem de programao Java, e do conceito de reengenharia, que tem por finalidade produzir um sistema novo, com uma manuteno mais fcil ou modificar um programa com o objetivo de melhorar o seu funcionamento (PRESSMAN, 2001). O Prolog significa PROgramming in LOGic (Programao em Lgica), uma idia nascida no incio dos anos 1970 para usar a lgica como linguagem de programao. Est baseado em um pequeno conjunto de conceitos, incluindo casamento de padres, estruturao em forma de rvore e backtracking automtico. Esse pequeno conjunto forma um ambiente de programao poderoso, especialmente adequado para problemas envolvendo objetos e suas relaes. Para realizar processamento, o Prolog enxerga os algoritmos em dois elementos disjuntos: a lgica e o controle. A lgica define o que dever ser solucionado, j o controle tenta propor uma soluo ao elemento lgico. No caso do Prolog, o programador precisa somente descrever o componente lgico de um algoritmo, deixando o controle da execuo a cargo do motor de inferncia.

10

A Linguagem Java teve seu desenvolvimento iniciado no incio de 1990, quando Naughton, Gosling e Sheridan (DEITEL; DEITEL, 2001) comearam a definir as bases para o projeto de uma nova linguagem de programao, apropriada para eletrodomsticos, sem os problemas j to conhecidos de linguagens tradicionais como o C e o C++. O objetivo era construir um ambiente de pequeno porte e integr-lo em uma nova gerao de mquinas para "pessoas comuns". Toda a especificao da linguagem terminou em agosto de 1991 e a ela deu-se o nome de "Oak" (DEITEL; DEITEL, 2001). Por problemas de copyright (j existia uma linguagem chamada Oak), o nome foi alterado em 1995 para Java, em homenagem ilha de Java, de onde vinha o caf consumido pela equipe da Sun. O grande diferencial da Linguagem Java foi a possibilidade de utilizar o mesmo aplicativo em diferentes sistemas operacionais, graas ao Java Virtual Machine, que permite aos programas desenvolvidos em Java poderem rodar em qualquer sistema operacional e em qualquer hardware. Devido a tal caracterstica, a linguagem Java chamada de linguagem hibrida. O interesse sobre essa integrao, Java e Prolog, deu-se pelo desconhecimento de qualquer ferramenta que possibilita-se a unio dessas duas tecnologias, que juntas, oferecem uma vasta quantidade de opes de desenvolvimento em diversos segmentos, tais como: Sistemas Especialistas: O estudo de sistemas especialista (SE) pode ser visto como um ramo da Inteligncia Artificial, que so desenvolvidos a partir da necessidade de se processar informaes no numricas. Um sistema especialista capaz de

11

apresentar concluses sobre um determinado tema, desde que devidamente orientado e alimentado. (XAVIER, 2003). Aplicaes Comerciais: So sistemas que procuram automatizar processos manuais, em empresas e indstrias, a fim de reduzir o custo e o tempo de desenvolvimento de seus produtos, tornando, assim, o produto mais competitivo no mercado. Outras motivaes relevantes foram possibilidade de criar aplicaes com a sutileza da Linguagem Java, no que se refere sua interface amigvel com o usurio final; as suas opes de apresentao de resultados atravs de diversos tipos de relatrios existentes; e, por ultimo, a facilidade da programao em si, a qual est baseada em objetos e eventos. Por tudo isso, possvel afirmar que o Java est em todo lugar, das torradeiras s sondas espaciais utilizadas pela NASA. Ela tem sido largamente utilizada em milhares de projetos, produtos e servios ao redor do mundo (INDRUSIAK, 1996). Por outro lado, a Linguagem Prolog est orientado, resoluo de problemas mediante o clculo de predicados, baseado em perguntas base de dados e provas matemticas. O programador Prolog especifica como deve ser a soluo, em vez de dar o algoritmo para sua resoluo. Essas solues se obtm mediante busca aplicando a lgica de predicados. Os aspectos apresentados acima foram determinantes na escolha dessas duas linguagens para realizar a integrao.

12

1.1 Caracterizao do problema. A maior produtividade da programao pode ser obtida atravs da escolha do paradigma de programao mais apropriado ao tratamento do problema. Entretanto, no desenvolvimento de sistemas de software complexos, muitas vezes, um nico paradigma no o suficiente. O projeto Java com Prolog pretende resolver a carncia existente em relao ao uso da programao em lgica, atravs do Prolog, com o uso de uma linguagem orientada a objeto, como o Java. Determinadas tarefas, ao serem realizadas em uma s linguagem, no alcanam o resultado esperado devido s limitaes que cada linguagem de programao impe ao seu desenvolvedor. Uma das caractersticas marcantes do Prolog o no oferecimento de uma interface amigvel, a qual extremamente importante para facilitar o uso do software quando este se faz necessrio comunicao com o usurio final e at mesmo aos desenvolvedores. O Prolog oferece apenas um prompt onde so includas as perguntas a serem feitas na base de conhecimento. Outra deficincia importante a gerao de relatrios sofisticados, os quais em determinadas tarefas se mostram obrigatrios. Em Java, o problema inverso. Existe um bom suporte tanto na gerao de relatrios estticos como dinmicos, devido s ferramentas oferecidas pelos diversos IDEs Ambiente de desenvolvimento integrado existentes no mercado, como NetBeans (SEVERO, 2005) e Eclipse (MERCENAS, 2005), que possuem mdulos especializados na criao de relatrios, possibilitando o

desenvolvedor criar com eficincia e elegncia tais documentos. Assim como h uma vasta gama de possibilidades de criao de relatrios, a construo de telas, 13

menus e botes tambm foi implementada com ateno especial pelos desenvolvedores da Sun, pois como o seu conceito original envolvia a comunicao com o usurio final, fazia-se necessria uma interface amigvel, leve e intuitiva (DEITEL; DEITEL, 2001). Para isso, foram desenvolvidas bibliotecas como a AWT (DEITEL; DEITEL, 2001) e o Swing (DEITEL; DEITEL, 2001) que possibilita a criao sofisticada de toda parte grfica de um sistema. Porm, por causa da linguagem Java ser baseada no paradigma imperativo e, contudo, no possuir embasamento matemtico, a resoluo de determinados problemas que envolvam a escolha de diferentes estratgias tornase extremamente complicado ao desenvolvedor e, mesmo com a construo do algoritmo, provavelmente a nica pessoa que poder dar manuteno a esse sistema o prprio desenvolvedor. Pelos problemas descritos acima, utilizam-se os paradigmas no imperativos possibilitando uma soluo mais clara, legvel, concisa e que modele de uma maneira muito melhor o problema tratado. Entre os paradigmas no imperativos, h o paradigma de programao em lgica (TORRES, 1999) que tem como modelo computacional a lgica de clculo de predicado e o Prolog como uma de suas linguagens, Devido s caractersticas distintas das linguagens Java e Prolog, podese construir solues para resoluo de problemas e propor novas metodologias que necessitem a utilizao conjunta dessas duas linguagens.

14

1.2 Estado da Arte. A tecnologia utilizada neste projeto no nenhuma tecnologia inovadora, tendo em vista a utilizao do Prolog, j h quase 20 anos como uma das principais linguagens para o desenvolvimento de aplicaes com inteligncia artificial e a linguagem Java, embora mais nova que o Prolog, tambm j possuindo sua tecnologia bem estabelecida. Embora seja desconhecida a existncia de um software que integre o Java com o Prolog, h bons programas construdos que possibilitam o desenvolvimento de um software integrado com essas duas tecnologias entre o, qual o Jlog-1.2.2.scr (JLOG, 2005) Totalmente escrito na linguagem Java, esse Prolog possui o cdigo fonte estruturado e modularizado permitindo modificaes e criaes de novas estruturas para utilizao integrada a uma aplicao Java. Para este trabalho de concluso, utilizou-se o Prolog Jlog-1.2.2.scr como descrito anteriormente.

1.3 Organizao da Monografia No captulo 2 foi descrito o tipo de metodologia utilizado no projeto final incluindo todo as etapas de desenvolvimento. O captulo 3 mostra o desenvolvimento de cada etapa definida no capitulo 2 para o desenvolvimento do sistema. O captulo 4 a parte dos resultados onde foi descrito como foi avaliado e validado o sistema. No captulo 5 foram descritos todas as anlises gerais das tecnologias, mtodos e concluso utilizada neste projeto.

15

1.4 Objetivo O objetivo do desenvolvimento do servidor de conhecimento Java com o Prolog foi diminuir a quantidade de linhas de cdigo fonte para uma aplicao que exige ambos os paradigmas.

16

2. METODOLOGIA

A metodologia utilizada no projeto foi desenvolvimento incremental (SOMMERVILLE, 2003), modelo que visa reduzir o retrabalho no processo de desenvolvimento. Esse mtodo consiste na identificao das funes que o sistema ir ter, distinguindo entre elas as que so mais importantes e quais so menos importantes para o sistema. Com isso, as funes prioritrias so entregues primeiramente ao cliente, sendo posteriormente integradas s funes no prioritrias. Essa metodologia visa diminuir o risco de fracasso completo no sistema. Embora possam ser encontrados problemas em algumas funes, provvel que algumas funes sejam entregues com sucesso ao cliente. O Modelo Incremental prope a diviso do desenvolvimento em etapas, sendo que, em cada etapa, ocorre um ciclo completo de desenvolvimento, culminando com um subsistema pronto para a utilizao. Uma recente evoluo dessa abordagem incremental chamada de (extreme programming) ou programao extrema (SOMMERVILLE, 2003).

18

Desenvolver Incremento(funo) do sistema

Validar incremento

Integrar incremento

Validar Sistema Sistema Final

Figura 1. Etapas do desenvolvimento incremental.

A figura 1 mostra o ciclo do processo de desenvolvimento de cada incremento (funo), isto , as etapas a serem executadas para validar-se o incremento. Aps desenvolver o incremento, deve-se realizar uma validao, atravs de testes sobre esse incremento concludo. O incremento ser integrado aos outros incrementos a fim de validar o sistema com todos os incrementos que j foram desenvolvidos e integrados. Etapas realizadas: I. Remoo da interface original do Prolog. II. Desenvolvimento da interface em DOS. III. Modificao do cdigo do Interpretador Prolog para receber mltiplos usurios. IV. Desenvolvimento do Servidor TCP/IP multiusurio.

19

V. Desenvolvimento das classes responsveis pela conexo ao servidor e realizao da integrao com o interpretador Prolog. VI. Desenvolvimento das classes para o tratamento das respostas enviadas do Prolog pelo servidor. VII. Desenvolvimento da aplicao, autmato finito no determinstico.

20

3. DESENVOLVIMENTO

Para que fosse possvel a realizao do trabalho final de concluso de curso, foi extremamente importante o aperfeioamento dos conhecimentos sobre as tecnologias utilizadas. A pesquisa por um interpretador Prolog, para servir de ncleo como fonte do processamento das informaes, foi realizada com extremo cuidado, pois encontrar um interpretador Prolog que possusse um cdigo aberto a modificaes posteriores e ainda de preferncia desenvolvido na Linguagem Java mostrou-se um tanto quanto trabalhoso. A realizao dessa etapa mostrou-se como crucial para as pretenses futuras no desenvolvimento de ferramentas para a utilizao conjunta com a linguagem Java. Caso contrrio, se via necessria a construo de um interpretador Prolog, que no seria o objetivo deste trabalho final e, ainda se fosse, seria uma tarefa extremamente complicada. Com o Interpretador Prolog encontrado, viu-se a necessidade do entendimento do seu cdigo a fim de possibilitar a realizao de modificaes, visando deix-lo apenas com o seu ncleo, isto , houve a retirada de toda a sua interface e funcionalidades que no iriam ser utilizadas no projeto. Aps essa fase de anlise e modificao do cdigo, entrou-se na fase de desenvolvimento, que seria efetivamente a contribuio e o objetivo deste trabalho final de concluso de curso. A etapa do desenvolvimento ocorreu com a construo de um servidor TCP/IP multiusurio, que possuiria a funo de receber todas as requisies que por ventura fossem recebidas de clientes e em seguida envi-las ao interpretador do Prolog. Para realizar esse multi-processamento das informaes recebidas dos clientes, foi necessria a implementao de Threads, correspondentes cada qual 22

a um cliente que estava acessando o servidor. Porm, para que o acesso s informaes do interpretador Prolog fosse realizado com segurana, foi necessrio implementar os controles de regies criticas atravs de semforos, o que permitiu preservar os dados acessados e modificados com eficincia. Com essa implementao de um servidor, atribuiu-se a funcionalidade de acesso remoto em uma rede TCP/IP ao interpretador Prolog, o que nos dias atuais extremamente benfica, tendo em vista a grande interligao dos computadores em torno de uma rede (KUROSE, 2003). Aps a criao do servidor, todos os acessos ao interpretador Prolog sero exclusivamente realizados pelo servidor e no mais atravs das invocaes de mtodos como podia ser feito anteriormente. Para realizar a conexo com o servidor, foi criada uma tabela de protocolos. Essa tabela tem a funo de identificar os dados enviados do cliente para o servidor, Com isso, quando os dados so recebidos, o servidor verifica o tipo de protocolo que foi enviado pelo cliente e realiza a funo de acordo com a sua definio.

23

A seguinte Tabela de Protocolos foi definida para este servidor.


Tabela 1. Protocolos utilizados pelo servidor.

Descrio Criao de uma nova base de conhecimento. Acrescentar conhecimento Apagar conhecimento. Realizar uma consulta Remover uma base de conhecimento. Abrir uma base de conhecimento Sentidos das setas:

Tabela de Protocolos Cliente Servidor A + (nome do banco de conhecimento sem extenso) B + (nome do banco de conhecimento, conhecimento(fato ou regra). C + (nome do banco de conhecimento, conhecimento(fato ou regra)) D + (pergunta ao banco de conhecimento). F + (nome do banco de conhecimento sem extenso). G +(nome do banco de conhecimento sem extenso).

Cliente Servidor S ou F S ou F S ou F S ou F S ou F S ou F

Indica o sentido do fluxo, isto , o cliente est enviando informaes para o servidor. Indica o sentido do fluxo, isto , o servidor est enviando informaes para o cliente. S significa sucesso. F significa falha. A criao de classes com seus mtodos para realizar a comunicao com o servidor e instru-lo como seria o acesso ao interpretador Prolog foi o principal desenvolvimento deste trabalho, pois estas classes so as ferramentas para os desenvolvedores utilizarem na construo de suas aplicaes. O desenvolvimento dessas classes baseou-se no modelo das classes e mtodos desenvolvidos para acessar um banco de dados convencional (ADELIZE, 2000). Tais classes facilitaram tanto a comunicao com o servidor como a utilizao para realizar o acesso ao interpretador Prolog, tendo em vista que o desenvolvedor no precisar se preocupar com o funcionamento interno 24

dos mtodos, devendo apenas conhecer quais so os parmetros que devem ser usados nesses mtodos. Com isso, qualquer interface desenvolvida, que necessite a utilizao do interpretador, dever simplesmente chamar os mtodos que por sua vez realizaram o acesso ao interpretador Prolog. As seguintes classes com seus respectivos mtodos foram criadas: 1. Classe conexo.java. Esta classe responsvel por realizar a conexo com o servidor. Atravs do mtodo realizarConexo(String Servidor, int Porta) invocado pela aplicao do cliente, possvel estabelecer a conexo com o servidor. Para isso, a aplicao deve especificar o IP e a porta do computador onde esta rodando o servidor. 2. Classe comando.java Esta classe responsvel por enviar ao servidor os comandos incluindo o seus respectivos protocolos, para o servidor processar e posteriormente enviar para o Prolog. O mtodo comando (ObjectOutputStream Saida, ObjectInputStream Entrada) responsvel pelo recebimento dos objetos de sada e entrada enviados pela classe conexo, que possuem a funo de enviar e receber respectivamente os dados atravs de uma conexo cliente-servidor. O mtodo executaComando (String opcao, String nome, String valor) responsvel pelo recebimento do protocolo a ser utilizado, o nome do banco de conhecimento e o conhecimento (fato ou regra). Aps receber os

25

parmetros, realiza-se a verificao do tipo do protocolo recebido, a fim de enviar os comandos corretos para o servidor, comandos estes apresentados na tabela 1. O mtodo fazPergunta(String conhecimento) responsvel pela realizao de consultas base de conhecimento. 3. Classe resposta.java Esta classe responsvel por receber e tratar todas as repostas enviadas pelo Prolog atravs do Servidor. O mtodo resposta (String Resultado) responsvel pela verificao do tipo de resposta enviada pelo servidor, isto , resposta do tipo (Sim, No), ou com contedo. Se a resposta for do tipo (Sim, No), no h necessidade de tratamento, sendo apenas devolvida para aplicao do cliente. Para respostas com contedo, os dados so armazenados em um Vector (estrutura de dados de armazenamento) para poder ser tratada pelos mtodos. O mtodo primeiraResposta() busca pelo primeiro elemento da resposta devolvido pelo servidor armazenado no Vector. O mtodo ultimaResposta() busca pela ltimo elemento da resposta devolvido pelo servidor armazenado no Vector. O Mtodo prximaResposta(int indicedovector) busca pelo prximo elemento da resposta, atravs de um ndice passado por parmetro, armazenada no Vector. Caso no haja mais elementos, o mtodo retorna um aviso de erro.

26

O Mtodo respostaAnterior(int indicedovector) busca o elemento da resposta anterior, atravs de um ndice passado por parmetro, armazenada no Vector. Caso no haja mais elementos, o mtodo retorna um aviso de erro. O mtodo respostaAtual() busca o elemento da resposta atual, armazenado no Vector, de acordo com o valor do ndice final deixado pelos mtodos prximaResposta ou respostaAnterior. O mtodo valordaResposta() retorna para camada da aplicao do usurio o resultado obtido atravs da utilizao dos mtodos acima. O mtodo simnaoResposta() retorna para camada da aplicao do usurio o resultado Sim ou No, de acordo com o que foi recebido pelo mtodo.

Classe Conexo

Classe Comando

Classe Resposta

realizarConexo

comando executaComando

resposta primeiraResposta ultimaResposta prximaResposta respostaAnterior respostaAtual valordaResposta simnaoResposta

Figura 2. Arquitetura das Classes desenvolvidas.

A figura 2 mostra um resumo das trs classes desenvolvidas com os seus respectivos mtodos.

27

Por ltimo, ocorreu o desenvolvimento de uma aplicao que utiliza o conjunto de classes e o servidor criado. A aplicao escolhida foi de um autmato finito no determinstico que na sua essncia tem como soluo a utilizao do paradigma no imperativo. Devido a essa caracterstica, a aplicao foi escolhida para utilizao como avaliao das classes e do servidor desenvolvido. Com as etapas desenvolvidas, a figura 6 abaixo ilustra como o desenvolvimento do servidor e das classes esto dispostos entre uma aplicao cliente e o interpretador Prolog.

28

Aplicao do Cliente
Opo para o Prolog. Resposta da opo escolhida.

Protocolo e parmetros.

Conexo TCP

Parmetros.

Resposta.

Camada de ligao

Prolog

Classe Conexo Classe Comando Classe Resposta

29

Servidor

Resposta.

Figura 3. Arquitetura geral do sistema.

30

4. RESULTADOS

Os resultados mostram se foi atingido ou no o objetivo proposto inicialmente. Abaixo est descrito como foram feitas a avaliao e a validao do sistema. 4.1 Testes dos Mdulos Desenvolvidos. Tendo sido escolhida a metodologia incremental, fez-se necessrio o teste de cada mdulo finalizado. Na fase inicial do trabalho, foi avaliada a retirada da interface desenvolvida pelo criador do Jlog-1.2.2.scr, tendo em vista que para este trabalho final de concluso de curso no teria nenhum interesse em manterse a interface. Foi necessria a recompilao de todo cdigo do Jlog-1.2.2.scr, a fim de retirar eventuais erros e preservar as funcionalidades do Prolog, devido retirada da interface. Aps terminar a primeira etapa, a segunda etapa abrangeu os mtodos responsveis pelas funcionalidades do Jlog-1.2.2scr, uma vez que, para o correto desenvolvimento posterior, tornava-se imprescindvel o funcionamento de todos os seus mtodos relacionados com o ncleo do Prolog. Ocorreu o

desenvolvimento de uma nova interface bsica, isto , feita atravs da interface DOS apenas para permitir o envio de comandos para o Prolog. Atravs dessa interface pode-se testar as seguintes situaes: I. Abrir base de conhecimento que no existe. II. Abrir base de conhecimento que existe. III. Remover base de conhecimento que no existe. IV. Remover base de conhecimento que existe. 30

V. Criar base de conhecimento sem nome. VI. Criar base de conhecimento com nome. VII. Incluir conhecimento diferente do padro. VIII. Incluir conhecimento no padro. IX. Excluir conhecimento que no existe. X. Excluir conhecimento que existe. XI. Realizar uma consulta sem sucesso. XII. Realizar uma consulta com sucesso. XIII. Realizar consultas com variveis. Todas essas situaes acima descritas, assim como as condies testadas, como causar as condies, resultados esperados e como observar os resultados esperados foram descritas no documento plano de teste. Aps essas duas etapas, o Jlog-1.2.2scr estava pronto para receber a integrao com o Java. Para a terceira etapa, o cdigo do Jlog-1.2.2scr foi modificado para receber mltiplos usurios conectados, para o qu foi necessrio retirar classes e variveis estticas. Alm da implementao para mltiplos usurios, fez-se necessrio, a utilizao de semforos nas regies criticas a fim de preservar a integridade dos dados. O seu funcionamento, ento, ocorre da seguinte maneira: 1 Aps ativado o servidor, este espera por alguma conexo. 31

2 Aps receber uma nova conexo de um cliente qualquer, o servidor cria uma thread para esta conexo e retorna ao seu modo de espera por uma nova conexo. A utilizao de semforos fez-se necessria para quando duas ou mais threads acessassem uma mesma regio critica. Como por exemplo, tentar escrever ao mesmo tempo no banco de conhecimento ou remover algum conhecimento. Para se testar esta situao, criou-se um lao de repetio dentro da regio crtica da thread criada anteriormente. Como h proteo por semforo na entrada da regio crtica e, com o lao, demora-se a execuo dessa regio crtica, qualquer outra thread que deseje entrar em sua regio crtica pode ser observada em estado bloqueado. A quarta etapa envolveu a criao do servidor TCP que permitia usurios, com o conjunto de classes desenvolvidas, acessarem de uma rede TCP interna o servidor que, por sua vez, acessaria o ncleo do Prolog. Para realizar o teste dessa etapa foram utilizados os seguintes testes: I. Ativar o servidor em um computador denominado Marqueze e executar o cliente nesse mesmo computador, isto , o cliente estaria realizando uma conexo localhost. Para realizar esse tipo de conexo, o IP que o cliente utilizou foi o 127.0.0.1 com a porta 5001. Este teste foi necessrio para verificar se a criao do socket (canal de comunicao entre o servidor e um cliente) e da sua thread estava ocorrendo corretamente, isto , permitindo o acesso atravs do servidor o Prolog. II. Para o ltimo teste, repetiu-se o passo de ativao do servidor no computador denominado Marqueze, assim como o acesso do cliente 32

Fernando que possua o IP 192.168.0.231. Porm, dessa vez, outra mquina denominada Rodrigo com o IP 192.168.0.220, tambm conectado ao mesmo Hub das mquinas Marqueze e Fernando. Tanto o cliente

Fernando como o Rodrigo realizaram acessos (incluses, alteraes, consultas) ao Prolog atravs do servidor. A penltima Etapa ocorreu sobre os conjuntos de classes criadas para permitir que o cliente acessasse o servidor de conhecimento, para que o servidor enviasse ao Prolog uma operao requisitada e, como conseqncia, recebesse a resposta, transmitindo para o cliente o resultado da operao. Para essa etapa, foram realizados novamente os testes da primeira etapa, porm agora atravs de uma rede TCP como mencionado na etapa anterior. Este teste teve a funo de mostrar o funcionamento do Prolog agora no mais com um cliente local e sim como dois clientes interligados em uma rede. E, por fim, o ltimo teste dessa etapa foi concentrado no tratamento das respostas enviadas pelo Prolog, que podem ser as seguintes: I. Resposta Sim ou No. Esse tipo de resposta ocorre quando feito uma pergunta que no contm nenhuma varivel de instanciao ex: pai(marcelo). II. Resposta que retorna um contedo, isto , diferente de Sim ou No. Esse caso ocorre quando utilizam-se variveis de instanciaes ex: pai(X). 4.2 Avaliao A avaliao do sistema foi feita atravs do desenvolvimento de uma soluo para um problema de um autmato finito no determinstico, utilizando 33

primeiro s o paradigma imperativo, atravs do uso da linguagem Java, e depois utilizando em conjunto ambos os paradigmas imperativo e no imperativo atravs do Servidor de conhecimento Java com Prolog. O autmato finito no determinstico do problema uma mquina abstrata que l, como entrada, uma string de smbolos e decide se deve aceitar ou rejeitar a string lido. O autmato possui certo nmero de estados e est sempre em um desses estados. O estado pode ser mudado, em decorrncia do reconhecimento de um determinado elemento da string de entrada e da situao em que o autmato se encontra (HOPCROFT et al. 2003).

A estrutura interna do autmato em questo pode ser representada pelo seguinte grafo de transio.

a,b a

a,b b

S1

A1

B1

Figura 4. Autmato finito no determinstico com um estado inicial.

No exemplo da figura 4, S1, A1, B1 so os estados do autmatos. A partir do estado S1 o autmato muda de estado para estado medida que vai lendo um elemento da string de entrada. As transies de estado do autmato dependem do smbolo de entrada corretamente lido, conforme indicado pelas legendas dos arcos no grafo de 34

transio. Uma transio ocorre toda vez que um smbolo da string de entrada lido e est de acordo com a legenda de um dos arcos que saem do estado atual. interessante notar que a transio da Figura 4 no determinstica. Se o autmato estiver em S1 e o smbolo de entrada a, ento a transio pode ser realizada tanto para S1 novamente quanto para A1. O seu processamento se baseia na escolha de um arco que aceita o elemento da string. A partir deste arco, procura-se encontrar o estado terminal, onde possvel encerrar a ao do autmato, atravs do processamento dos outros elementos da string. Se no for possvel encontrar o estado terminal, ento autmato tentar pelo outro arco encontrado. O estado B1 denotado como estado terminal, dizemos que o autmato aceitou a string de entrada se atravs de um estado inicial, o autmato consegue processar a string, at chegar ao seu estado terminal. Como exemplo de uma cadeia de string, para a qual o autmato finito no determinstico processa, foi utilizada a cadeia aaab. Para uma cadeia invlida, isto , cadeia que o autmato finito no determinstico no processa, utilizou-se a string aaaba. 4.3 Validao A seguir est descrito parte da soluo encontrada para o problema do Autmato finito no determinstico utilizando somente um paradigma no imperativo:

35

if(estado.equals("1") == true) { //Verifica qual simbolo terminal a ser processado para o estado seguinte if(terminal.equals("A") == true || terminal.equals("a") == true) { estado = linha1[0].toString(); } else if(terminal.equals("B") == true || terminal.equals("b") == true) { estado = linha1[1].toString(); } else if(terminal.equals("C") == true || terminal.equals("c") == true) { estado = linha1[2].toString(); } } else if(estado.equals("2") == true) { if(terminal.equals("A") == true || terminal.equals("a") == true) { estado = linha2[0].toString(); } else if(terminal.equals("B") == true || terminal.equals("b") == true) { estado = linha2[1].toString(); } }
Figura 5. Cdigo fonte do paradigma imperativo.

O trecho do cdigo fonte apresentado na figura 5 parte de uma condio para poder-se verificar qual estado o autmato dever ir. Na figura 6 apresentada a soluo utilizando o servidor de conhecimento, exceto pela interface humanocomputador.

36

aceita(String):-inicial(In),aceita(String,In). aceita(S, []):-final(S). aceita(S, [X | R]) :- trans(S, X, S1), aceita(S1, R). inicial(s1). final(b1). trans(s1,a,s1). trans(s1,a,a1). trans(s1,b,s1). trans(a1,a,a1). trans(a1,b,a1). trans(a1,b,b1). trans(b1,a). trans(b1,b).
Figura 6. Cdigo fonte utilizando os dois paradigmas.

Com as instrues desenvolvidas acima, pode-se resolver o problema do autmato finito no determinstico da figura 4 apresentada anteriormente. As Figuras 5 e 6 no esto apresentando o cdigo fonte completo, apenas esto ilustrando a diferena do desenvolvimento quando utiliza-se um paradigma imperativo em relao ao paradigma no imperativo. Para mostrar esta diferena, o trecho do cdigo fonte apresentado na figura 5 equivalente ao comando trans(s1,a,s1) da figura 6. O sistema foi avaliado realizando a comparao no tamanho, do cdigo representado pela quantidade de linhas escritas, entre o cdigo fonte desenvolvido no paradigma imperativo com o cdigo fonte desenvolvido no servidor de conhecimento Java com Prolog.

37

Tabela 2. Comparao da quantidade de linhas de cdigo. Quantidades de linhas de cdigos desenvolvidas utilizando uma interface grfica. Utilizao do paradigma imperativo, atravs da linguagem Java. Utilizao de ambos os paradigmas, imperativo e no imperativo atravs do servidor de conhecimento Java com Prolog. 1248 linhas Quantidades de linhas de cdigos desenvolvidas sem interface grfica. 881 linhas

840 linhas

278 linhas

Na prtica, os resultados obtidos mostraram que a utilizao integrada das duas tecnologias foi responsvel por uma diminuio de 32% do cdigo desenvolvido para resoluo do problema do autmato finito no determinstico, utilizando uma interface grfica avanada (com telas e botes) e de 68% sem nenhuma interface grfica. Com esse resultado, o sistema atingiu o objetivo proposto inicialmente e, assim, validou o Servidor de conhecimento Java com Prolog.

38

5. CONCLUSO

O desconhecimento de um Servidor Java com Prolog foi o principal motivo de ter realizado este trabalho de concluso de curso. Atravs da metodologia de desenvolvimento incremental foi possvel desenvolver mdulo (incremento) por mdulo, permitindo realizar testes em cada um deles antes de realizar a integrao. A utilizao de um problema do autmato finito no

determinstico, para avaliao do Servidor de conhecimento Java com Prolog, permitiu, atravs do seu cdigo fonte, realizar a validao comparando com o cdigo fonte gerado pelo paradigma imperativo. A realizao deste trabalho de concluso de curso demonstrou o poder da variedade de opes para o desenvolvimento de sistemas complexos, utilizando os paradigmas imperativo e o no imperativo conjunto, que em determinados casos (como de um autmato finito no determinstico) se mostraram extremamente melhores do que a utilizao convencional com somente o paradigma imperativo. A diminuio efetiva do cdigo foi a melhoria encontrada ao se utilizar este tipo de abordagem. A utilizao da metodologia de Desenvolvimento incremental mostrouse uma forma de abordagem totalmente diferente da metodologia clssica. O mtodo de dividir em etapas e comear a desenvolver de acordo com o grau de prioridade ajudou a controlar o ritmo de desenvolvimento do projeto, pois o desenvolvimento ocorreu gradualmente, facilitando a realizao de testes e a integrao de todos os mdulos posteriormente para gerao do produto final. Outro ponto interessante foi a utilizao do conceito de reengenharia que neste trabalho foi utilizado para melhoria de um sistema. O entendimento do

40

cdigo original foi um grande desafio, pois para isso no foi s preciso entender o cdigo, mas sim descobrir a lgica pensada pelo desenvolvedor. Graas aos resultados obtidos na utilizao do servidor de

conhecimento Java com Prolog, constatou-se que problemas aparentemente complicados para serem resolvidos de forma isolada se tornaram problemas de complexidade normal. Com isso, a restrio da utilizao do Prolog devido falta de integrao com o usurio final deixou de ser obstculo, permitindo a utilizao desse poderoso paradigma no imperativo. Conseqentemente, isto permitiu uma linguagem lgica rodando por trs da linguagem Java, tornando-a agora extremamente eficiente para os problemas baseado em casos como, por exemplo, sistemas especialistas. Para trabalhos futuros seria interessante desenvolver uma soluo mais elaborada para o tratamento de respostas complexas enviadas pelo Prolog. Respostas que podem ser do tipo lista dentro de outra lista, que para certos casos o Prolog ir devolver.

41

6. REFERNCIAS

ADELIZE, G. de O. Guia de comandos SQL. 1 ed. So Paulo: Relativa Editora, 2000. DEITEL, H; DEITEL, P. Java, Como Programar. 3 ed. So Paulo: Bookman, 2001. HOPCROFT, J.E.; ULLMAN, J.D.; MOTWANI, R. Introduo teoria dos autmatos, linguagens e computao. 1 ed. So Paulo: Campus, 2003. INDRUSIAK, L.S. Linguagem Java. Disponvel em:

<http://www.inf.ufrgs.br/tools/java/introjava.pdf>. Acesso em: 19 jul. 2005. JLOG, mar. 2005. KUROSE, J. F. Redes de Computadores e a Internet. 2 ed. So Paulo: Addison Wesley, 548 p., 2003. MERCENAS, I. Eclipse 3.0.1. Programando com Visual Editor. 1 ed. So Paulo: Atlas Books, 350p., 2005. PRESSMAN, R. Software Engineering A Pratictioners Approach. Fifth Edition. EUA: McGraw-Hill Company, 843 p., 2001. SOMMERVILLE, L. Engenharia de Software. 6 ed. So Paulo: Addison Wesley, 686 p., 2003. SEVERO, C. E. P. Netbeans Ide 4.1. 1 ed. So Paulo. Brasport, 363 p., 2005. TORRES, D. F. M. Introduo Programao em Lgica. Disponvel em: <http://www.di.ubi.pt/~ia/caderno-pl-1999-Delfim-Torres.pdf> Acesso em: 22 ago, 2005. XAVIER, M. Sistemas Especialistas. Disponvel em: Prolog escrito em Java. Disponvel em:

<http://sourceforge.net/project/showfiles.php?group_id=44926>. Acesso em: 15

<http://www.inf.ufrgs.br/procpar/disc/cmp135/trabs/mpy/sistemasespecialistas.pdf > Acesso em: 10 set, 2005.

43