Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_ruleruntimeo [2008/06/01 00:22] miw |
pl:miw:miw08_ruleruntimeo [2008/06/14 14:46] gjn |
====== Opis ====== | |
| |
**Grzegorz Caban**, <grzegorz.caban@gmail.com> | |
| |
Investigate runtime integration aspects, mainly the integration of the Object-Oriented Model in Prolog with a Java VC possibilities executable design, LogTalk, etc. | |
* input Java, OO Prolog documentation, MVC concept. [[http://www.prologonlinereference.org/oop.psp|Prolog OOP]], [[http://www.logtalk.org|LogTalk]], [[http://www.trinc-prolog.com/doc/pl_obj.htm|TrincProlog]], [[http://www.sics.se/isl/sicstuswww/site/index.html|SICStus Prolog]] | |
* output | |
Feasibility study, a prototype. | |
| |
[[pl:miw:miw08_ruleruntimeo:spotkania | Historia spotkań ]] | |
| |
| |
====== Projekt ====== | |
* {{:pl:miw:mvceditorlogtalk.zip|Edytor Tekstu oparty o MVC}} - View i Controller w J2SE, Model w Logtalk, modyfikacja istniejącej aplikacji napisanej w całości w J2SE, podmiana Model na Logtalk + implementacja integracji Java <-> Logtalk w Controller | |
* {{:pl:miw:thermostatlogtalk.zip|Termostat oparty o MVC}} - View i Controller w J2SE, Model w Logtalk, przykład termostatu zaimplementowanego od podstaw w Javie i Logtalk'u na podstawie [[hekate:hekate_case_thermostat|modelu reguł]]. | |
| |
====== Sprawozdanie ====== | |
| |
===== Cel projektu ===== | |
Celem projektu było przetestowanie możliwości budowy aplikacji wielowarstwowych opartych o wzorzec projektowy MVC przy użyciu Javy oraz Prologa. Zakładając, że aplikacja jest projektowana zgodnie z metodologia programowania obiektowego i na etapie projektowania aplikacji nie decydujemy, który moduł, czy wręcz obiekt której klasy ma zostać zaimplementowany przy użyciu Javy, a który w Prologu. Dopiero osoba implementująca ten projekt powinna mieć możliwość teoretycznie dowolnego wyboru jednej z tych technologii, w zależności od tego jak wygodniej będzie zaimplementować dany obiekt. | |
Tak postawione założenia wymuszają znalezienie technologi/framework'a umożliwiającego: | |
* Tworzenie kodu w języku Prolog z wykorzystaniem wszystkich dobrodziejstw programowania obiektowego. Jest to warunek konieczny, aby zapewnić pełną dowolność implementowania poszczególnych klas modelu w Prologu lub Javie, musimy zapewnić, że Prolog będzie zapewniał te same możliwości abstrakcji danych, enkapsulacji, dziedziczenia itp co Java. | |
| |
* Wygodną integracje kodu Prolog'a z kodem w Javie, w ideale bez tworzenia dodatkowego kodu służącego tylko do komunikacji pomiędzy obiektami napisanymi w różnych językach, a w praktyce minimalizujących ilość takiego kodu. Zwłaszcza istotne wydaje się aby implementacja tej warstwy komunikacyjnej dała się łatwo odseparować od logiki samej aplikacji, tak aby minimalnie zaburzyć projekt wejściowy. | |
* Warte podkreślenia jest też wymóg integracji obiektów Prologa i Javy dopiero na etapie runtime'u, nie chodzi tutaj o wygenerowanie kodu Javy na podstawie kodu Prologa i poźniejsze uruchomienie aplikacji w samej Javie. | |
| |
| |
Pierwszym zatem zadaniem było znalezienie odpowiedniego framework'a umożliwiającego tworzenie obiektów w Prologu oraz integracje tych obiektów z obiektami zaimplementowanymi w Javie. | |
| |
| |
===== Obiektowy Prolog ===== | |
Poniżej znajduje się lista framework'ów, które zostały w ramach tego projektu przetestowane w nadziei znalezienia spełniającego wyżej postawione zadania : | |
| |
[[pl:miw:miw08_ruleruntimeo:oopframeworks|Analiza istniejących rozwiązań]] | |
| |
===== Wybrane rozwiązanie ===== | |
| |
Jako docelowa platforma realizacji projektu został wybrany [[http://www.logtalk.org|LogTalk]] ze względu na fakt że zapewnia on pełne wsparcie dla obiektowości w Prologu, oraz jest w przeciwieństwie do [[http://www.sics.se/isl/sicstuswww/site/index.html|SICStus Prolog]] i [[http://www.sics.se/isl/sicstuswww/site/index.html|SICStus Prolog]] technologią w pełni Open Source, podczas gdy pozostałe dające praktycznie podobne możliwości są niestety technologiami komercyjnymi. | |
| |
===== Integracja LogTalk'a z Java ===== | |
Niestety sam Logtalk nie wspiera w żaden sposób integracji obiektów tworzonych przy jego pomocy z innymi językami obiektowymi. Dlatego kolejnym krokiem jest było znalezienie narzędzia umożliwiającego integracje Logtalk'a z Java. Ponieważ docelowym kompilatorem Prologa używanym w tym projekcie jest SWI Prolog, naturalna wydała się próba użycia do tego celu jedno z pakietów standardowych dołączanych do tej dysytrybucji, czyli [[http://www.swi-prolog.org/packages/jpl/|JPL]] który oferuje dwustronny interface pomiędzy Prologiem a Java.Jeżeli dodać do tego obiektowość oferowaną przez LogTalk to wydaje się, że jest to zestaw spełniający dane wymagania. | |
[[pl:miw:miw08_ruleruntimeo:jpljava | Przykład użycia JPL do komunikacji Prolog'a z Java]]. | |
| |
| |
Przykład całej klasy napisanej w Javie, służącej do komunikacji z obiektami LogTalk znajduje się tutaj [[https://dev.crazydwarves.org/ProjetM1TER/browser/trunk/src/fr/up5/mi/etu/vnfc/argumentation/engine/LogtalkEngine.java|LogTalkEngine]] | |
| |
== Napotkane problemy i rozwiazania == | |
| |
Podczas realizacji tego projektu natrafiono na sporo problemów natury konfiguracyjnej, co wydaje się dość naturalne jako że używamy kilka niezależnie tworzonych bibliotek. Oto lista ważniejszych problemów wraz z opisem ich rozwiązania : | |
* [[pl:miw:miw08_ruleruntimeo:prologmodules | Używanie modułów zewnętrznych modułów Prologa z obiektów Logtalk]] | |
* [[pl:miw:miw08_ruleruntimeo:swiconfig | Konfiguracja SWI-Prolog do współpracy z Logtalk]] | |
| |
[[pl:miw::miw08_ruleruntimeo:howto | Jak skonfigurować JPL i Logtalk ]] - uwagi na temat użycia i konfiguracji JPL i Logtalk do współpracy z Java. | |
| |
| |
| |
| |
Celem przetestowania znalezionych rozwiązań na przykładzie prostej aplikacji opartej o wzorzec MVC, powstały dwie aplikacje opisane poniżej. Inne brane pod uwagę przykłady prostych projektów [[pl:miw::miw08_ruleruntimeo:mvcexamples|aplikacji opartych o MVC]] | |
| |
===== Edytor Tekstu ===== | |
| |
Celem tego przykładu była próba zmiany gotowej aplikacji napisanej w [[http://java.sun.com/developer/technicalArticles/javase/mvc/| Javie opartej o wzorzec MVC]], na aplikacje której część logiki jest zaimplementowana poprzez obiekty Logtalk. | |
| |
| |
[[pl:miw::miw08_ruleruntimeo:mvceditor | Jak zaimplementować model w Logtalku, w gotowej aplikacji J2SE opartej o MVC]] | |
| |
| |
===== Termostat ===== | |
W odróżnieniu od poprzedniego przykładu temu przyświecał cel próby implementacji całej aplikacji, mając na starcie tylko [[hekate:hekate_case_thermostat|model]] w formie diagramów ARD, XTT. Model ma zostać zaimplementowany w Logtalk'u, reszta w Javie. | |
| |
| |
[[pl:miw::miw08_ruleruntimeo:mvcthermostate | Jak zaimplementować MVC w Javie i Logtalku na podstawie diagramów ARD, XTT]] | |
| |
| |
| |
| |
| |
====== Materiały ====== | |
* [[http://java.sun.com/developer/technicalArticles/javase/mvc/|Opis edytora tekstu z strony Sun'a]] oraz {{:pl:miw:mvceditordescription.zip|kod tej strony}} | |
* {{:pl:miw:mvcexample.zip|źródła edytora dokumentów w oryginale (bez Logtalk)}} | |
* [[https://dev.crazydwarves.org/ProjetM1TER/wiki|Projekt wykorzystujący Logtalk i JPL do integracji z Java]] | |
* [[http://logtalk.org/|Logtalk - strona główna ]] | |
* [[http://www.swi-prolog.org/packages/jpl/| Dokumentacja do JPL ]] | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |