Różnice

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

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:miw:2009:miw09_logtalk_umlgraph:prezentacja [2009/06/06 02:25]
jsi08
pl:miw:2009:miw09_logtalk_umlgraph:prezentacja [2019/06/27 15:50] (aktualna)
Linia 118: Linia 118:
 ===== Cechy LogTalk! ===== ===== Cechy LogTalk! =====
  
 +  * LogTalk jest rozszerzeniem dla języka Prolog, który wzbogaca go o dodatkowe możliwości. ​
   * LogTalk jest próbą integracji programowania logicznego z programowaniem obiektowym. ​   * LogTalk jest próbą integracji programowania logicznego z programowaniem obiektowym. ​
   * Pozwala na enkapsulowanie bazy wiedzy, napisanej w deklaratywny sposób, wewnątrz obiektu. Dzięki temu jest ona dostępna jedynie tam gdzie jest potrzebna, a kod programu staje się łatwiejszy w utrzymaniu i bardziej efektywny. ​   * Pozwala na enkapsulowanie bazy wiedzy, napisanej w deklaratywny sposób, wewnątrz obiektu. Dzięki temu jest ona dostępna jedynie tam gdzie jest potrzebna, a kod programu staje się łatwiejszy w utrzymaniu i bardziej efektywny. ​
Linia 134: Linia 135:
   * Wsparcie dla aplikacji wielowątkowych.   * Wsparcie dla aplikacji wielowątkowych.
   * Polimorfizm. Wsparcie dla wczesnego jak i późnego wiązania.   * Polimorfizm. Wsparcie dla wczesnego jak i późnego wiązania.
 +
 +=====Elementy języka. =====
 +
 +  * obiekty - prototypy, klasy i instancje. Obiekty tworzymy za pomocą dyrektyw: **object/​1-5** oraz **end_object/​0**,​ pomiędzy którymi umieszczamy definicję obiektu. ​
 +  * protokoły - odpowiedniki interfejsów. Definicje protokołów są enkapsulowane pomiędzy dwiema dyrektywami:​ **protocol/​1-2** i **end_protocol/​0**.
 +  * kategorie - nie posiadają odpowiedników. Są to kontenery zawierające pewne funkcjonalności. Kategorie są tworzone dzięki dyrektywom **category/​1-3** oraz **end_category/​0**.
 +  * predykaty - odpowiedniki funkcji.
 +
 +
 +=====Relacje między obiektami.=====
 +
 +LogTalk pozwala na tworzenie obiektów, które nie są związane z innymi żadną relacją, jak i tworzyć hierarchie obiektów oparte na prototypach albo klasach. Można ponadto używać zarówno pojedynczego jak i wielokrotnego dziedziczenia.
 +
 +  * **objectName** - nazwa obiektu, argument obowiązkowy.
 +  * **implements(protocolName)** - protokół implementowany przez dany obiekt.
 +  * **imports(categoryName)** - kategoria importowana przez dany obiekt.
 +  * **extends(parentName)** - rodzic po którym następuje dziedziczenie.
 +  * **instantiates(className)** - obiekt jest instancją klasy className.
 +  * **specializes(superclassName)** - obiekt jest podklasą a superclassName superklasą.
 +
 +
 +===== Deklarowanie Predykatów. =====
 +
 +  * Wszystkie Predykaty do których chcemy mieć dostęp z innych obiektów muszą być zadeklarowane. ​
 +  * Deklaracja musi zawierać przynajmniej nazwę predykatu oraz liczbę argumentów. ​
 +  * Muszą one poprzedzać definicję albo wywołanie w celu zapewnienia poprawnego przebiegu kompilacji. ​
 +
 +Zakres widoczności:​
 +
 +  * **public** - predykat można wołać z dowolnego obiektu.
 +  * **protected** - mogą być wołane jedynie z potomka lub w obiekcie w którym są zdefiniowane.
 +  * **private** - dostęp do predykatów ma jedynie obiekt w którym jest zdefiniowany.
 +  * **local** - jak predykaty prywatne mogą być jedynie wołane z obiektu, ale są niewidoczne dla mechanizmu obsługi błedów.
 +
 +
 +===== Przykład. =====
 +
 +Predykaty dla obiektów w LogTalk są definiowane tak samo jak w Prologu. Dodawane są jedynie dodatkowe znaczniki.
 +
 +<code prolog>
 +:- object(list).
 +    :- public(append/​3).
 +    :- public(member/​2).
 +
 +    append([], L, L).
 +    append([H| T], L, [H| T2]) :-
 +        append(T, L, T2).
 +
 +    member(H, [H| _]).
 +    member(H, [_| T]) :-
 +        member(H, T).
 +:- end_object.
 +</​code>​
 +
 +===== Uzyskiwanie informacji o obiektach. =====
 +
 +  * | ?- instantiates_class(InstanceName,​ ClassName). - Sprawdza czy zachodzi relacja //​instantiates//​. ​
 +  * | ?- specializes_class(ClassName,​ SuperclassName). ​ - Sprawdza czy zachodzi relacja //​specializes//​.
 +  * | ?- extends_object(ObjectName,​ ParentName). ​ - Sprawdza czy zachodzi relacja //​extends//​.
 +  * | ?- imports_category(ObjectName,​ CategoryName). ​ - Sprawdza czy zachodzi relacja //​imports//​.
 +  * | ?- implements_protocol(ObjectName,​ ProtocolName). ​ - Sprawdza czy zachodzi relacja //​implements//​.
 +  * | ?- object_property(ObjectName,​ PropertyName). ​ - Sprawdza czy ObjectName posiada właściwość PropertyName.
 +
 +===== Uzyskiwanie informacji o protokołach. =====
 +
 +  * | ?- extends_protocol(ProtocolName1,​ ProtocolName2). ​ - Sprawdza czy zachodzi relacja //​extends//​.
 +  * | ?- implements_protocol(ObjectOrCategoryName,​ ProtocolName). ​ - Sprawdza czy zachodzi relacja //​implements//​.
 +  * | ?- protocol_property(ProtocolName,​ PropertyName). ​ - Sprawdza czy ProtocolName posiada właściwość PropertyName.
 +
 +
 +===== Uzyskiwanie informacji o kategoriach. =====
 +
 +  * | ?- extends_category(CategoryName1,​ CategoryName2). ​ - Sprawdza czy zachodzi relacja //​extends//​.
 +  * | ?- imports_category(ObjectName,​ CategoryName). ​ - Sprawdza czy zachodzi relacja //​imports//​.
 +  * | ?- implements_category(ObjectName,​ CategoryName). ​ - Sprawdza czy zachodzi relacja //​implements//​.
 +  * | ?- category_property(CategoryName,​ PropertyName). ​ - Sprawdza czy CategoryName posiada właściwość PropertyName.
 +
 +
 +===== Instalacja i uruchamianie programów LogTalk. =====
 +
 +  - Odpowiednie pakiety w zależności od tego na jakim systemie operacyjnym pracujemy pobieramy ze strony: http://​logtalk.org/​download.html
 +  - Uruchomienie LogTalk to po prostu uzgodnienie dwóch plików:
 +
 +<code prolog>
 +:​-consult('/​usr/​share/​logtalk/​configs/​swi'​).
 +:​-consult('/​usr/​share/​logtalk/​compiler/​logtalk'​).
 +</​code>​
 +
 +Kompilowanie plików LogTalk:
 +<code prolog>
 +logtalk_compile([source_file1,​ source_file2,​ ...]).
 +logtalk_load([source_file1,​ source_file2,​ ...]).
 +</​code>​
 +
 +===== Zaproponowane rozwiązanie.=====
 +
 +Obiekt javaobject - zawiera następujące publiczne predykaty:
 +
 +  * //​object_drow/​1//​ - zapisuje obiekty, za pomocą skłądni Java.
 +  * //​category_drow/​1//​ - zapisuje kategorie, za pomocą skłądni Java.
 +  * //​predicate_drow/​1//​ - zapisuje predykaty, za pomocą skłądni Java.
 +
 +Obiekt javacomment - zawiera następujące publiczne predykaty:
 +
 +  * //​setComment/​1//​ - przyjmuje listę stringów. Stosuje się go do umieszczenia dodatkowych definicji opisującymi tworzone diagramy.
 +  * //​setAsUMLMainComment/​0//​ - ustawia zasięg komentarza dla całego diagramu.
 +
 +===== Zaproponowane rozwiązanie.=====
 +
 +Obiekt javaobject - zawiera następujące publiczne predykaty:
 +
 +  * //​object_drow/​1//​ - zapisuje obiekty, za pomocą skłądni Java.
 +  * //​category_drow/​1//​ - zapisuje kategorie, za pomocą skłądni Java.
 +  * //​predicate_drow/​1//​ - zapisuje predykaty, za pomocą skłądni Java.
 +
 +Obiekt javacomment - zawiera następujące publiczne predykaty:
 +
 +  * //​setComment/​1//​ - przyjmuje listę stringów. Stosuje się go do umieszczenia dodatkowych definicji opisującymi tworzone diagramy.
 +  * //​setAsUMLMainComment/​0//​ - ustawia zasięg komentarza dla całego diagramu.
 +
 +===== Zaproponowane rozwiązanie.=====
 +
 +Obiekt mainobject - zawiera następujące publiczne predykaty:
 +
 +  * //​mainFunction/​0//​ - ten predykat należny zdefiniować samemu. Zawiera on definicję diagramu. Opisujemy tutaj elementy, które chcemy rysować na diagramie za pomocą //​javaobject//,​ dodając komentarze opisujące diagram za pomocą //​javacomment//​.
 +
 +Plik drow.pl:
 +
 +  * //drow/0// - predykat ładuje wybrany plik LogTalk i zapisuje go do pliku. ​
 +
 +
 +Obiekty w pliku drowobject.lgt.
 +
 +  * plik służy do zademonstrowania przykładu działania prezentowanego rozwiązania.
 +
 +
 +===== Zaproponowane rozwiązanie.=====
 +
 +Skrypt umlgraph gdzie:
 +
 +  * ${1} oznacza nazwę kompilowanego pliku prologa.
 +  * ${2} oznacza nazwę wywoływanego predykatu.
 +  * ${3} oznacza format w jakim zostanie zapisany diagram. ​
 +
 +Za pomocą poniższej komendy dostajemy plik .java i diagram drow.png
 +
 +<code prolog>
 +./umlgraph drow drow png
 +</​code>​
 +
 +
 +===== Diagram drow.png =====
 +
 +{{:​pl:​miw:​2009:​miw09_logtalk_umlgraph:​drow.png|}}
 +
 +
 +===== Ograniczenia i problemy.=====
 +
 +  * Ograniczenia UmlGraph - interpretuje tylko Javę
 +  * Problem z inną semantyką LogTalk i JAVA - brak kategorii w Javie
 +  * Brak typów w LogTalk - konieczność dodania sztucznych typów.
 +  * Brak możliwości dostępu do predykatów prywatnych - nie można ich pokazać na diagramie.
 +
 +
 +===== Materiały =====
 +
 +
 +  * [[http://​www.umlgraph.org/​ | UMLgraph - główna strona projektu ]]
 +  * [[http://​www.umlgraph.org/​doc/​index.html| Tworzenie diagramów UML za pomocą UMLgraph - tutorial ]]
 +  * [[http://​www.umlgraph.org/​download.html| UMLgraph - download]]
 +
 +----
 +
 +
 +  * [[http://​logtalk.org/​ | LogTalk - główna strona projektu ]]
 +  * [[http://​blog.logtalk.org//​ | LogTalk - blog ]]
 +  * [[http://​logtalk.org/​manuals/​userman/​index.html|User Manual]]
pl/miw/2009/miw09_logtalk_umlgraph/prezentacja.1244247934.txt.gz · ostatnio zmienione: 2019/06/27 15:57 (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