next up previous contents index
Next: Jazyky, které spojují OOP Up: Objektově orientované programování v Prologu Previous: Úvod   Obsah   Index


Teorie [1]

Objektově orientované a logické programování jsou dvě nezávisle na sobě se rozvíjející odvětví počítačové vědy.

Nabízí lepší programovací techniky než tradiční procedurální jazyky. Logické programování se vyvinulo počátkem 70. let přímým vývojem z důkazů založených na automatech a umělé inteligence [12]. LP je založeno na prefixové logice formulované ve větách teorie důkazů a teorie modelování. Teorie důkazů poskytuje formální specifikaci pro správné vyjádření vlastních myšlenek, zatímco teorie modelování analyzuje jak vyjádřit obecná tvrzení s ohledem na množinu daných faktů. Prefixová logika nebyla používána až do uvedení jazyka PROLOG (jazyka pro PROgramování v LOGice). Prolog používá zúženou formu obecných technik důkazů a tím je efektivnější a lépe se v něm programuje. Umožňuje řešení problémů vyjádřené deklarativní formou, aniž bychom naprogramovali, jak má být problém řešen.

Od 60. let je OOP nejpopulárnější programovací technika. Definuje prostor jako množinu vzájemně se ovlivňujících objektů uchovávajících data a chování. OO filozofie definuje mocný nástroj vývoje životního cyklu kombinací abstrakce, zapouzdření a modularity. Abstrakce umožňuje vynechat detaily a zaměřit se pouze na důležité prvky. Zapouzdření odděluje vnější specifikaci od vnitřní implementace. Modularita umožňuje souhru, srozumitelnost a symetrii organizováním prostoru do skupin úzce souvisejících objektů.

Spojení OO a LP se koncem 80. let dostalo do popředí zájmu. Cílem bylo získat to nejlepší z obou přístupů. Několik postupů zahrnujících OOP v PROLOGu skončilo ve fázi diskusí [8,15,16], několik dalších jazyků jako např. OOLP [6], C-Logic [5], L&O [13], Prolog++ [14], COMPLEX [7], LIFE [4] bylo vymyšleno a některé z nich i implementovány. Žádný z nich však nepodporuje všechny důležité vlastnosti OOP.

Jedním z hlavních směrů, v nichž došlo k výše zmíněnému spojení obou přístupů jsou mimo jiné také KR6.1 úlohy a KBS6.2.

Proniknutím do rodiny LISP (LOOPS, FLAVORS, CLOS) a dále pak do průmyslu (KEE, ART, NEXPERT-OBJECT) se OOP vydává svou vlastní cestou. Důležitou výhodou, kterou OOP vnáší do KBS je možnost implementovat veškeré komponenty KBS (báze znalostí, uživatelské rozhraní atd.) výhradně pomocí OOP.

Vynecháme-li hodnoty SW inženýrství, používá OOP prakticky onen stejný přístup k programování, který je znám např. u FORTRANu, PASCALu nebo C. Není sice vhodný pro KR úlohy, ale ostatní nástroje jako např. programování na základě pravidel, omezení a přístupů byly samozřejmě implementovány. Rodina LISP byla opět první, která experimentovala s nástroji OOP, nedosáhli však pronikavějších výsledků. Rodina AI6.3 koketovala před cca dvaceti lety s něčím podobným jako OOP, ale až LOOPS a CLOS byli první, kteří použili OOP jednotně a systematicky a implementovali tak zásadní konstrukce jako dědičnost, zasílání zpráv a polymorfismus.

Další přístup, jehož aplikace v AI a KBS měly vždy své příznivce a odpůrce, je Logické Programování (LP). LP je z následujících důvodů výhodnější pro KR aplikace:

Oponenti LP tvrdí, že LP není vhodné pro AI aplikace, protože využití v jiných vědních oborech je mnohem podstatnější. Tento argument není dostatečně přesvědčující. Logika je pouze částí našeho chápání světa, avšak důležitou. Mnoho aplikací v PROLOGu vzniklo pod záštitou projektu Fifth Generation Computer Systems (FGCS) v Japonsku. Velmi brzy se však zjistilo, že PROLOG sám o sobě nemá dostatečné množství potřebných SW vybavení pro implementaci rozsáhlých KBS. Daniel Bobrow ve své práci Je-li PROLOG odpověď, jak zní otázka? [17] uvádí, že PROLOG může být propojen jak s funkcionálním tak OO přístupem. K řešení různých problémů je dobré využívat různé přístupy. Je však důležité plně využít jejich potenciály při vyrovnaném propojení pokud jde o data a kontrolu provádění. V projektu FGCS se pracovalo na přizpůsobení PROLOGu KR úlohám a zároveň směřovali k současnému provádění. Ukázalo se, že je velmi jednoduché modelovat objekty pomocí současného provádění predikátů PROLOGu, které zasílají zprávy jeden druhému přes potencionálně neohraničenou frontu. V ní jsou zprávy částečně vyhodnocovány. Což znamená, že predikát nebo objekt začne plnit požadavky, jakmile je ve frontě alespoň jedna zpráva a nečeká na úplné naplnění fronty. Po provedení požadavku zavolá objekt rekurzivně sám sebe s argumentem obsahujícím zbytek fronty zpráv. Proces dědičnosti může být zde dosažen pomocí zasílání požadavků. Existuje mnoho jazyků založených na tomto modelu: SPOOL, VULCAN, SCOOP, POLKA.



Subsections
next up previous contents index
Next: Jazyky, které spojují OOP Up: Objektově orientované programování v Prologu Previous: Úvod   Obsah   Index
Tomáš Kubíček 2002-05-19