Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

pl:miw:miw08_ruleruntimeg [2008/06/15 22:34]
miw
pl:miw:miw08_ruleruntimeg [2019/06/27 15:50]
Linia 1: Linia 1:
-====== Opis ====== 
-__**Projekt zakończony**__ 
  
-Filip Haftek ​   <​filiphaftek@o2.pl>​ 
- 
-Investigate runtime integration aspects, mainly ​ 
-semi-automatical building of a GUI for Prolog programs possibilities 
-XPCE, Static QT/Gtk, [[http://​www.gtk-server.org|Gtk-Server]],​ Java (Swing), Eclipse (SWT) 
-  * input 
-XPCE, QT, GTK, GtkServer, Java etc., SWI Prolog documentation 
-  * output 
-Feasibility study, a prototype. 
-  * integration options for Java: JPL (SWI),​Logtalk (OO Prolog), architecture:​ MVC 
-  * approach: 2 -3 app. cases, M prolog, V inv Java, C-> JPL/​Logtalk,​ e.g. ready M in Prolog, build V in Java: [[pl:​prolog:​prolog_lab:​prolog_lab_2#​cwiczenieprosty_system_ekspertowy|Car ES]], opposite: ready MV i Java, build M in Prolog, make it work with the V 
- 
-__SWING__ __LogTalk__ 
- 
- 
-====== Spotkania ====== 
-[[pl:​miw:​miw08_ruleruntimeg:​spotkania]] 
- 
-============ ​ Projekt ====== 
- 
-============ ​ 1. PROSTY SYSTEM EKSPERCKI ====== 
-==Predykat tworzący okno z pytaniem:== 
-<code prolog> 
-question(Result,​T):​- 
-   ​jpl_call('​javax.swing.JOptionPane','​showConfirmDialog',​[(@null),​T,'​Question',​0],​X),​ 
-   ​change(X,​Result).  ​ 
-</​code>​ 
-==Predykat pokazujący informacje:​== 
-<code prolog> ​   
-info(X):- 
-   ​jpl_call('​javax.swing.JOptionPane','​showMessageDialog',​[(@null),​X],​F). 
-</​code>​ 
- 
-==Predykat get_yes_or_no:​== 
-Przed: 
-<code prolog> 
-get_yes_or_no(Result) :- get(Char), ​             ​ 
-                         ​get0(_), ​               ​ 
-                         ​interpret(Char,​Result),​ 
-                         ​!. ​     
-</​code>​ 
-Po: 
-<code prolog> 
-get_yes_or_no(Q,​Result) :-  
-                           ​ask_question(Q,​X),​ 
-                           ​question(Result,​X). ​   
-</​code>​ 
-==Predykat ask_question:​== 
-Przed: 
-<code prolog> 
-ask_question(fuel_is_ok) :- 
-   ​write('​Look in the carburetor. ​ Can you see or smell gasoline?'​),​nl. 
-</​code>​ 
-Po zmianach stał się termem: 
-<code prolog> 
-ask_question(fuel_is_ok,'​Look in the carburetor. ​ Can you see or smell gasoline?'​). 
-</​code>​ 
-==Predykat user_says:​== 
-Przed: 
-<code prolog> 
-user_says(Q,​A) :- \+ stored_answer(Q,​_),​ 
-                  nl,nl, 
-                  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,​_),​ 
-                  get_yes_or_no(Q,​Response),​ 
-                  asserta(stored_answer(Q,​Response)),​ 
-                  Response = A. 
-</​code>​ 
-[[pl:​miw:​miw08_ruleruntimeg:​car|Plik car.pl]] 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
-============ ​ 2. ZAAWANSOWANE SYSTEMY EKSPERCKIE ====== 
-== 2.1  XSHELL System do rozpoznowania ryb:== 
-  * Predykat question2/2 pokazuje okno z pytaniem oraz przyciskami YES i NO 
-<code prolog> 
-    question2(Result,​Question):​- 
- jpl_datums_to_array(Question,​Q),​ 
- jpl_new('​miw2.YNQuestion',​[Q],​D),​ 
- jpl_call(D,​setVisible,​[@(true)],​_),​ 
- jpl_call('​miw2.YNQuestion',​getValue,​[],​V),​ 
- Result = V. 
-</​code>​ 
-  * Predykat myQuestion/​3 pokazuje okno z przyciskami do wyboru( tylko jeden można zaznaczyć) 
-<code prolog> 
-  myQuestion(Question,​Choices,​Response):​- 
- jpl_datums_to_array(Choices,​L),​ 
- jpl_datums_to_array(Question,​Q),​ 
- jpl_new('​miw2.MyRBForm',​[L,​Q],​F),​ 
- jpl_call(F,​setVisible,​[@(true)],​_),​ 
- jpl_call('​miw2.MyRBForm',​getValue,​[],​V),​ 
- Response = V. 
-</​code>​ 
-  * Predykat info/1 wyświetla okno z informacją ​ 
-<code prolog> 
-info(X):- 
-         ​jpl_datums_to_array(X,​Q),​ 
-         ​jpl_new('​miw2.Info',​[Q],​D) 
-</​code>​ 
-Zmienione pliki: 
-  * [[pl:​miw:​miw08_ruleruntimeg:​oops|oops.pl]] 
-  * [[pl:​miw:​miw08_ruleruntimeg:​animal_kb|animal_kb.pl]] 
- 
-== 2.2  OOPS System do produkcji zabawek :== 
-  * Problem: Po załadowaniu danych wejsciowych,​ przy próbie ponownego załadowania danych program wczytuje do bazy prologu dane z pierwszego wczytania, trzeba zamknąć aplikacje i uruchomić ponownie. 
-  * Predykat initial/0 wyświetla okno z wszystkimi możliwymi danymi wejściowymi z możliwością zaznaczenia dowolnej ilości danych 
-<code prolog> 
-initial:​- ​                         ​ 
-         ​jpl_datums_to_array([dane_wejsciowe],​L),​ 
-         ​jpl_new('​miw2.MyCBForm',​[L,'​Choose facts:'​],​D),​ 
- jpl_call(D,​getChecked,​[],​_),​ 
- jpl_get('​miw2.MyCBForm',​termos,​{C}),​ 
- assert(initial_data(C)). 
-</​code>​ 
-  * control/2 wyświetla okno sterowania, przyciski sterujące wczytywane są dynamicznie w konstruktorze 
-<code prolog> 
-control(X,​Buttons):​- 
-                    repeat, 
-     jpl_datums_to_array(Buttons,​B),​ 
-                    jpl_new('​miw2.ControlForm',​[X,​B],​F),​ 
-     jpl_call(F,​getValue,​[],​V),​ 
-     change(V,​Z),​ 
-     doit(Z), 
-     Z = exit. 
-</​code>​ 
-  * readF/1 otwiera okno wyboru pliku z rozszerzeniem pl do załadowania 
-<code prolog> 
-readF(File):​- 
-      ​jpl_new('​miw2.PlFileChooser',​[],​F),​ 
-      ​jpl_call(F,​getFile,​[],​File). 
-</​code>​ 
-Zmienione pliki: 
-  * [[pl:​miw:​miw08_ruleruntimeg:​xshell|xshell.pl]] 
-  * [[pl:​miw:​miw08_ruleruntimeg:​cichild|cichild.pl]] 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
-====== Sprawozdanie ====== 
-== 1.Cel projektu :== 
- Celem projektu było swtorzenie aplikacji MV, w której modelem jest program napisany w języku prolog, natomiast interfejs został stworzony w Javie. ​ 
-== 2. Wykonanie :== 
- W projekcie zastosowano 6 klas Javy odpowiedzialnych za wyświetlanie odpowiednich okien w trakcie działania programu. Szczegółowy opis klas znajduje się poniżej, natomiast cały projekt Javy wraz z dokumentacją znajduje się w części Materiały. Dodatkowo stworzono 6 predykatów,​ których opis znajduje się w części Projekt. ​ 
-Aby uruchomić program należy wpisać odpowiednią komendę w prologu ( main. lub xshell. w zależności od programu), następnie pojawi się okienko Javy z informacją. Dalsza obsługa aplikacji polega na klikaniu odpowiednich przycisków zgodnie z pojawiającymi się instrukcjami. 
-Klasy Javy zostały napisane w możliwie uniwersalny sposób tzn: 
-  * klasa Info posiada 3 różne konstruktory w celu ułatwienia obsługi jej z poziomu prologu ( String[], Compound[] lub String) 
-  * klasa ControlForm jako argument pobiera Insrtukcję oraz listę przycisków,​ po wciśnięciu przycisku zwracana jest jego wartośc tj. 1 dla pierwszego, ​     2 dla kolejnego itp., co wymaga jedynie zastosowania z poziomu języka prolog zamiany wartości liczbowej na dowolną wartość. 
- 
-UWAGA: ​  W programie OOPS po załadowaniu pliku z danymi i wybraniu odpowiednich danych startowych, aby dokonać ponownego załadowania danych wejściowych należy zamknąć program i uruchomić ponownie. ​ 
-== 3. Zastosowane klasy i predykaty :== 
-1. Klasy Javy wykorzystywane z poziomu języka Prolog: 
-  * Info - odpowiada za wyświetlanie okna z informacją [[pl:​miw:​miw08_ruleruntimeg:​info|Info.java]] 
-  * MyRBForm - okno z RadioButtonami ​ [[pl:​miw:​miw08_ruleruntimeg:​myrbform|MyRBForm.java]] 
-  * MyCBForm - okno z CheckBoxami  ​ 
-  * YNQuestion - okno z pytaniem oraz przyciskami YES i NO  [[pl:​miw:​miw08_ruleruntimeg:​ynquestion|YNQuestion.java]] 
-  * ControlForm - okno z przyciskami do sterowania aplikacją ​ [[pl:​miw:​miw08_ruleruntimeg:​controlform|ControlForm.java]] 
-  * PlFileChooser - okno z wyborem pliku prologu ​ [[pl:​miw:​miw08_ruleruntimeg:​plfilechooser|PlFileChooser.java]] 
- 
-2. Predykaty wykorzystyjuące klasy Javy: 
-  * myQuestion(Question,​Choices,​Response) 
-  * question2(Result,​Question) 
-  * info(X) 
-  * initial 
-  * readF(File) 
-  * control(X,​Buttons) 
- ​Dokładny opis predykatów znajduje się w części Projekt. 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
-====== Materiały ====== 
- 
-[[pl:​miw:​miw08_ruleruntimeg:​wymagania|Wymagania]] 
- 
-Spakowany projekt Javy - {{:​pl:​miw:​miw08_ruleruntimeg:​miw2.zip|miw2.zip}} 
- 
-Do projektu CAR: 
-{{:​pl:​miw:​miw08_ruleruntimeg:​car.pl|car.pl}} 
- 
-Do projektu OOPS: 
-{{:​pl:​miw:​miw08_ruleruntimeg:​oops.pl|oops.pl}} 
-{{:​pl:​miw:​miw08_ruleruntimeg:​animal_kb.pl|animal_kb.pl}} 
- 
-Do projektu XSHELL: 
-{{:​pl:​miw:​miw08_ruleruntimeg:​xshell.pl|xshell.pl}} 
-{{:​pl:​miw:​miw08_ruleruntimeg:​cichlid.pl|cichlid.pl}} 
-{{:​pl:​miw:​miw08_ruleruntimeg:​readstr.pl|readstr.pl}} 
-{{:​pl:​miw:​miw08_ruleruntimeg:​readnum.pl|readnum.pl}} 
-{{:​pl:​miw:​miw08_ruleruntimeg:​writeln.pl|writeln.pl}} 
pl/miw/miw08_ruleruntimeg.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0