Laboratório de Programação III -...

16
Laboratório de Programação III

Transcript of Laboratório de Programação III -...

Laboratório de Programação III

Sumário

Considerações Iniciais Modelo Arquitetural Outras Integrações Referências Bibliográficas

Considerações Iniciais

Porque integrar?

Emprego do mecanismo de busca e inferência de prolog em programas Java;

Utilização das vantagens do Java em programas prolog;

Ampliação do domínio dos termos prolog○ De Strings a objetos

Modelo Arquitetural Arquitetura em 1 camada

Um programa Prolog é transformado em um programa Java;

Arquitetura em 2 camadas Emulação de um motor Prolog emulado em Java;

Arquitetura em 3 ou mais camadas Programas Java fazem chamadas a uma camada

intermediária, que por sua vez invoca o motor Prolog; Programas Prolog fazem chamadas a uma camada

intermediária, que as repassam para a JVM.

Arquitetura em 1 camadaPré-compilação de regras prolog em classes Java, queimplementam o mecanismo de busca e inferência prolog.

Programa Prolog (Familia.pl)

avo(X,Z) :- pai(X,Y), pai(Y,Z).avo(X,Z) :- pai(X,Y), mae(Y,Z).avo(X,Z) :- mae(X,Y), pai(Y,Z).avo(X,Z) :- mae(X,Y), mae(Y,Z).mae(marta, joao).mae(maria, silvia).pai(jose, joao).pai(joao, marcos).mae(sandra, jose).pai(pedro, jose).

Arquitetura em 1 camadaPrograma Java (Familia.java)

public class Familia {

private static Set fatos = new HashSet();

static {

fatos.add(new Fato(“Mae”, “Marta”, “Joao”));

fatos.add(new Fato(“Mae”, “Maria”, “Silvia”));

fatos.add(new Fato(“Pai”, “Jose”, “Joao”));

. . .}

public static boolean Avo(String x, Sting y) {

return (Avo_1(x,y) || Avo_2(x,y) || Avo_3(x,y) || Avo_4(x,y));

}

private static boolean Avo_1(String x, String y) {

for (Iterator i = fatos.iterator(); i.hasNext(); ) {

Fato f = (Fato) i.next();

if (f.getPredicateName().equals(“Pai”) &&

g.getParam(1).equals(x) {

Fato aux = new Fato(“Pai”, f.getParam(2), y);

if (fatos.contains(aux)) return true;

}

}

return false;

}

. . .}

Arquitetura em 2 camadasBiblioteca de classes Java que implementam afuncionalidade do motor de Prolog;

Emulação do motor Prolog em Java: Exemplos:

○ jProlog Descrição: IDE para linguagem Prolog com interpretador. Link: http://sourceforge.net/projects/jprolog/

○ JavaLog Descrição: Uma biblioteca de classes Java. Link: http://sourceforge.net/projects/javalog/

Arquitetura em 2 camadas

Objeto + assert(String)+ checkGoal(String)+ findAll(String)

InterfaceProlog

Classes Java queimplementamo motor prolog

Arquitetura em 3 camadasBiblioteca de classes Java servem comoponte para algum sistema já existente:

Plugins para algum sistema integrado de outra linguagem(C, C#,...) com prolog.

Comunicação da JVM com o runtime prolog via sockets (ou similar).○ Ex.: InterProlog○ Link: http://www.declarativa.com/interprolog/

Arquitetura em 3 camadasInterProlog - integra Java e Prolog via comunicação

JVM via sockets ↔ Runtime Prolog

AplicaçõesJava

ProgramaProlog

ClassesInterProlog

JVM

PredicadosInterProlog

ExecutávelProlog

sockets

Redirecionam. I/O

Visão Geral da Arquitetura

Arquitetura em 3 camadas

Objetos Java

javaMessage(T,R,E,M,A,RA,N) :-socket_get(S,T,...),socket_put(S,T,M,...)...

InterfaceJava.pl

termoProlog :-javaMessage(...).

Rede

Predicado javaMessage ( . . .)usado para enviar mensagens a objetos Java.

Três formas:

• javaMessage(Objeto, Mensagem)• javaMessage(Objeto, Resultado, Mensagem)• javaMessage(Objeto, Resultado, Excecao,Mensagem, Argumentos, ArgumentosDepois)

Arquitetura em 3 Camadas

InterProlog – Exemplo de uma regra em Prologtrabalhando com javaMessage

distancia(Local1, Local2, Dist) :-

javaMessage(Local1, Dist, dist(Local2)).

Outras IntegraçõesOntologias(OWL) X Prolog

Disponível em http://arxiv.org/ftp/arxiv/papers/0711/0711.3419.pdf

Outras IntegraçõesProlog/Java

JPL – Interface bidirecional Prolog/Java Link: http://www.swi-prolog.org/packages/jpl/

JIProlog – Plataforma Java interpretação Prolog Link: http://www.brothersoft.com/mobile/jiprolog-2179.html

PrologCafe – Sistema de comunicação Prolog e Java Link: http://kaminari.scitec.kobe-u.ac.jp/PrologCafe/

Diversos: Link: http://kaminari.scitec.kobe-u.ac.jp/logic/jprolog.html

Referências Bibliográficas jProlog

http://people.cs.kuleuven.be/~bart.demoen/PrologInJava/

JavaLoghttp://azunino.sites.exa.unicen.edu.ar/research/projects/agent-development-tools

InterProloghttp://www.declarativa.com/interprolog