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 camada Pré-compilação de regras prolog em classes Java, que implementam 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 camada Programa 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 camadas Biblioteca de classes Java que implementam a funcionalidade 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 InterfaceProlog Objeto + assert(String) + checkGoal(String) + findAll(String) Classes Java que implementam o motor prolog Arquitetura em 3 camadas Biblioteca de classes Java servem como ponte 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 camadas InterProlog - integra Java e Prolog via comunicação JVM via sockets ↔ Runtime Prolog Aplicações Java Programa Prolog Classes InterProlog Predicados InterProlog JVM Redirecionam. I/O sockets Visão Geral da Arquitetura Executável Prolog Arquitetura em 3 camadas termoProlog :javaMessage(...). InterfaceJava.pl 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) javaMessage(T,R,E,M,A,RA,N) :socket_get(S,T,...), socket_put(S,T,M,...)... Rede Objetos Java Arquitetura em 3 Camadas InterProlog – Exemplo de uma regra em Prolog trabalhando com javaMessage distancia(Local1, Local2, Dist) :javaMessage(Local1, Dist, dist(Local2)). Outras Integrações Ontologias(OWL) X Prolog Disponível em http://arxiv.org/ftp/arxiv/papers/0711/0711.3419.pdf Outras Integrações Prolog nos fundamentos WS Disponível em http://ftp.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol-287/paper_1.pdf Outras Integrações Prolog/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/PrologI nJava/ JavaLog http://azunino.sites.exa.unicen.edu.ar/research/pro jects/agent-development-tools InterProlog http://www.declarativa.com/interprolog