[[
✎ pl:miw:miw08_ruleruntimeg_2
]]
aiWiki
Pokaż stronę
Ostatnie zmiany
Indeks
Zaloguj
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== Opis ====== Damian Janicki <janicki.damian@gmail.com> Investigate runtime integration aspects, mainly semi-automatical building of a GUI for Prolog programs possibilities XPCE, Static QT/Gtk, Gtk-Server, Java (Swing), Eclipse (SWT) * input: XPCE, QT, GTK, GtkServer, Java etc., SWI Prolog documentation * output: Java/JPL, Feasibility study, a prototype. * integration options for Java: JPL (SWI),Logtalk (OO Prolog), architecture: MVC * approach: 2 -3 app. cases, M prolog, V in Java, C -> JPL/Logtalk, e.g. ready M in Prolog, build V in Java: Car ES, opposite: ready MV i Java, build M in Prolog, make it work with the V ====== Spotkania ====== ===== 08.03.04 ===== * **MISSED** prototyp dla car, tj. ask_question ===== 080311 ===== * problems, problems ===== 080318 ===== * przerobienie car na wywołanie V w Javie * jpl pod linuxem na wiki do czwartku ===== 080401 ===== MISSED ===== 080415 ===== * model z [[hekate:varda]], view w java, funkcjonalność z ''varda_model.pl'' (ew. innych) ma być udostępniania przez jako model, do tego jest view w javie funkcje (proste reqestery, radiobox): split, -> na ile, ktore, jakie nowe czesci finalize -> na ile att, ktore property (new att) <code> sar. show the ARD diagram, can be used sar(File), shi. show the ARD history (TPH), can be used shi(File), sha. show the TPH and ARD combined, with can be used sha(File), setof([A,B],ard_depend(A,B),L). arp. write ARD model in Prolog, can be used arp(File), the file can be subsequently consulted to recreate the model, </code> sprawdz rezultatu!!!! ===== 080429 ===== * varda ===== 080527 ===== * logika w goal z prologu, patrz [[pl:miw:miw08_prolog_javasockets]] * ui pozwala na zrobienie tylko tego co w danym kontekście możliwe ===== 080810 ===== * split, sparowzd alpha ====== Projekt ====== Oryginalny system ([[pl:prolog:prolog_lab:prolog_lab_2#tematprosty_system_ekspertowy]]) === Wersja 1 === == Predykat tworzący dialog, za pomocą, którego pobieramy informacje od użytkownika == <code prolog> show_yes_no_dialog(Tekst,Response) :- jpl_new(array(class([java,lang],['String'])),['yes','no'], ArrayRef), jpl_get(ArrayRef,0,ArrayPosRef), jpl_get('javax.swing.JOptionPane', 'YES_NO_OPTION', YesNoRef), jpl_get('javax.swing.JOptionPane', 'QUESTION_MESSAGE', QuestionRef), jpl_call('javax.swing.JOptionPane', 'showOptionDialog', [@(null), Tekst, 'Question', YesNoRef, QuestionRef, @(null), ArrayRef, ArrayPosRef], RetVal), interpret(RetVal,Response). interpret(1,no). interpret(0,yes). </code> == Predykat tworzący dialog, który wyświetla informacje o uszkodzeniach == <code prolog> show_explain_dialog(Tekst) :- jpl_call('javax.swing.JOptionPane', 'showMessageDialog', [@('null'),Tekst],_). </code> == Predykat ask_question == Przed zmianami: <code prolog> ask_question(starter_was_ok) :- write('When you first started trying to start the car,'),nl, write('did the starter crank the engine normally? '),nl. </code> Po zmianach (korzysta z Java): <code prolog> ask_question(starter_was_ok,Res) :- show_yes_no_dialog('When you first started trying to start the car did the starter crank the engine normally?',Res). </code> == Predykat explain == Przed zmianami: <code prolog> explain(wrong_gear) :- nl, write('Check that the gearshift is set to Park or Neutral.'),nl, write('Try jiggling the gearshift lever.'),nl. </code> Po zmianach: <code prolog> explain(wrong_gear) :- show_explain_dialog('Check that the gearshift is set to Park or Neutral.Try jiggling the gearshift lever.'). </code> == Predykat user_says: == Przed: <code prolog> user_says(Q,A) :- \+ stored_answer(Q,_), ask_question(Q), get_yes_or_no(Response), asserta(stored_answer(Q,Response)), Response = A. </code> Po: <code prolog> user_says(Q,A) :- \+ stored_answer(Q,_), ask_question(Q,Response), asserta(stored_answer(Q,Response)), Response = A. </code> V: Interfejs w Javie == Funkcja wywolujaca prologa == <code java> private void startDiagnose(){ Query queryConsult = new Query("consult", new Atom("pl/carJPL.pl")); queryConsult.query(); Query start = new Query("start"); start.query(); } </code> === Wersja 2 === W stosunku do wersji pierwszej deklaracje dialogów z pytaniem do użytkownika znajduja się w klasie MessageDialogs. Dzieki temu poziomu prologu wołana jest tylko jedna funkcja: Klasa MessageDialogs <code java> import javax.swing.JOptionPane; public class MessageDialogs { public static String showYesNoDialog(String A_strMessage) { String strRetVal = new String(""); Object[] options = {"Yes", "No"}; int nRetVal = JOptionPane.showOptionDialog( null, A_strMessage, "Question", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]); if(nRetVal == 1) strRetVal = "yes"; else if (nRetVal == 0) strRetVal = "no"; return strRetVal; } public static void showInformation(String A_strMessage){ JOptionPane.showMessageDialog(null, A_strMessage); } } </code> Predykat show_yes_no_dialog : <code prolog> show_yes_no_dialog(Tekst,Response) :- jpl_call('dialog.MessageDialogs', 'showYesNoDialog', [Tekst], Response). </code> [[pl:miw:miw08_ruleruntimeg_2:pliki|Źródła projektu]] ====== Sprawozdanie ====== ===== Cel projektu ===== Celem projektu było stworzenie aplikacji, której modelem jest jest program Varda napisany w języku prolog, natomiast interfejs miał być stworzony w języku java. Komunikacja pomiędzy java, a prologiem miała odbywać się za pomocą biblioteki JPL. ===== Wykonanie ===== W ramach projektu udało się zrealizować interfejs graficzny napisany w języku Java do programu Varda. Program składa się z klas java, które tworzą GUI, oraz klas, które są odpowiedzialne za komunikacje z prologiem. W projekcie znajduje się także plik prologa, gdzie zdefiniowane są odpowiednie zapytania pobierające informacje z programu varda. ==== Najważniejsze pliki ==== * MainFrame.java - klasa tworząca interfejs użytkonika * SplitData.java - klasa przetrzumująca informacje o elementach, na których należy wykonać operacje split * VardaControl.javc - klasa, która za pomocą odpwiednich predykatów pobiera informacje z programu Varda, które następnie przekazywane są do MainFrame lub do SplitData (dla operacji split). Klasa odpowiada również za wysyłanie danych do prologa gdy wykonujemy operacje takie jak split, finalize. * gui_query.pl - plik prologa, w którym znajdują się predykaty potrzebne do pobierania informacji z programu varda, np. pobieranie atrybutów które możemy ze splitowac, lub zfinalizować. ===== Uruchomianie projektu ===== Aby uruchomić program należy posiadać bibliotekę JPL. Sposób instalacji oraz źródła projektu znajdują się [[pl:miw:miw08_ruleruntimeg_2:pliki|tutaj]] Następnie należy sciągnąć źródla projektu i następnie skompilować je za pomocą polecenia javac: javac -classpath $PROLOG_HOME/lib/jpl.jar . gdzie zmienna $PROLOG_HOME jest scieżką do katalogu w którym zainstalowany jest Swi-prolog. Następnie uruchamiamy projekt za pomocą polecenia: java -classpath $PROLOG_HOME/lib/jpl.jar MainFrame Można także ściagnąc skompilowany projekt, który należy uruchomić poleceniem: java -jar -classpath $PROLOG_HOME/lib/jpl.jar VardaControl.jar Trzecim sposobem jest ściągniecie projektu eclipse za pomocą SVN z repozytorium: http://svn2.assembla.com/svn/MIVprojekt/VardaFrame ====== Materiały ====== [[http://www.swi-prolog.org/packages/jpl/|JPL - Prolog/Java interface]]
pl/miw/miw08_ruleruntimeg_2.1213868655.txt.gz
· ostatnio zmienione: 2019/06/27 15:58 (edycja zewnętrzna)
Pokaż stronę
Poprzednie wersje
Menadżer multimediów
Do góry