next up previous contents index
Next: Závěr Up: LogTalk: popis a ukázky Previous: Ladění programů   Obsah   Index

Implementace

Systém Logtalku byl implementován s ohledem na standardy obsažené v ISO Prologu. Snaží se využívat pouze možnosti společné pro většinu jazyků na bázi PROLOGu, ať už komerčních či akademických. Převzatá reprezentace objektů je velmi jednoduchá a efektivní, umožňuje přímou manipulaci bez použití kompilátoru pro překlad mezi definicemi objektů a kódem PROLOGu. Každý objekt je reprezentován jako množina klauzulí. Každá vnitřní báze je reprezentována 1-ární klauzulí. Každý slot je reprezentován 2-ární klauzulí nebo vyšší, kde první argument udává jméno bloku. Metody jsou běžně reprezentovány pravidly Prologu, kde vstupní a výstupní parametry jsou argumenty jména zprávy. Např.:


    'Class'( legalObjectName(Jmeno) ) :- ...
    'Class'( subClassOf,'Abstraktni_trida' ).
    'Class'( instances(Instance), Self ):- ...
Proměnná Self je vytvořena se jménem objektu který obdržel zprávu na prvním místě. V případě delegace, proměnná nazvaná Klient udržuje jméno objektu delegace. Např.:

    'Real'( set(Slot, Hodnota), Klient, Self ) :- ...
Zasílání a delegace zpráv je udělána takto:

    send( :Zprava, Objekt )
    delegate( :Zprava, Klient, Objekt )
V případě, že generování událostí je nechtěné, můžeme použít:

    send( !Zprava, Objekt )
    delegate( !Zprava, Klient, Objekt )
Např.:

    send( !instance(Je), Trida )
    delegate( !set(hmotnost,7.6), kniha, aReal )
Všimněte si, že : a ! jsou metody ve třídách send a delegate. Logtalk disponuje několika způsoby jak zaslat zprávu množině objektů (broadcasting) a možností výběru podmnožiny objektů, které daná zpráva uspokojuje (s nebo bez sdílení argumentů). Spojení mezi zprávou a příslušnou metodou je vytvořeno dynamicky s použitím vyhledávacího algoritmu implementovaným v typu slotu. Sledované události jsou deklarované klauzulemi jako:

    beforeMonitor(Objekt, Zprava, Monitor)
    afterMonitor(Objekt, Zprava, Monitor)
Pokud jsou například zaslány následující zprávy:

    delegate( :set(hmotnost,7.6), kniha, aReal )
a existuje klauzule:

    afterMonitor( aReal, set(hmotnost,Hodnota), monitor)
systém zašle zprávu:

    delegate( !after(set(hmotnost,7.6),aReal), kniha, monitor )
Pokud chcete využít výhod možností správy událostí, vybraný PROLOG umožňuje indexování prvního argumentu v dynamickém kódu. Takto tedy existence sledovaných událostí nemá vliv na výkon nemonitorovaných zpráv.

Je možné za běhu programu vytvářet, editovat a rušit třídy, objekty a sloty. Tato možnost, která potvrzuje dynamické vlastnosti Logtalku, nalézá využití na poli umělé inteligence.

Logtalk nabízí bohatou knihovnu tříd a typů slotů. Každému typu v PROLOGu odpovídá příslušná třída v Logtalku. Zahrnuty jsou různé třídy pro kolekce a slovníky. Jiné třídy umožňují správ vztahů mezi objekty, ladění a dokumentování programů. Je vyvíjen systém pro řešení problémů prohledávání stavového prostoru.


next up previous contents index
Next: Závěr Up: LogTalk: popis a ukázky Previous: Ladění programů   Obsah   Index
Tomáš Kubíček 2002-05-19