Opis

Projekt zakończony

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.

Feasibility study, a prototype.

Historia spotkań

Projekt

  • 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
  • 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 modelu reguł.

Uruchomienie

Oba powyższe projekty to skompresowane projekty Eclipse, aby je uruchomić należy :

  1. Rozpakować zawartość archiwum do wybranego przez siebie folderu,
  2. Uruchomić Ecplipse IDE i jako Workspace wybrać folder wybrany w punkcie pierwszym
  3. Nastepnie z menu kontekstowego Eclipse wybieramy File → New Project
  4. W oknie dialogowym wybieramy : Java Project → Next
  5. Zaznaczamy radiobutton : Create project from existing source i klikając browse wybieramy folder zawierający rozpakowane źródła projektu z punktu 1
  6. Wpisujemy nazwe projektu (musi być zgodna z nazwa folderu wybranego w poprzednim punkcie), klikamy Next
  7. wybieramy finish na ostatniej stronie okna dialogowego
  8. prawdopodobnie konieczne będzie skonfigurowanie JPL i logtalk
  9. projekt jest gotowy do uruchomienia

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 :

Analiza istniejących rozwiązań

Wybrane rozwiązanie

Jako docelowa platforma realizacji projektu został wybrany LogTalk ze względu na fakt że zapewnia on pełne wsparcie dla obiektowości w Prologu, oraz jest w przeciwieństwie do SICStus Prolog i 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 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. 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 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 :

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 aplikacji opartych o MVC

Edytor Tekstu

Celem tego przykładu była próba zmiany gotowej aplikacji napisanej w Javie opartej o wzorzec MVC, na aplikacje której część logiki jest zaimplementowana poprzez obiekty Logtalk.

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 model w formie diagramów ARD, XTT. Model ma zostać zaimplementowany w Logtalk'u, reszta w Javie.

Jak zaimplementować MVC w Javie i Logtalku na podstawie diagramów ARD, XTT

Materiały

pl/miw/miw08_ruleruntimeo.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