Létezik objektum orientált kiterjesztése a Prolog nyelvnek, és sikerült teljesen a standard Prolog szintaktikán belül megvalósítani, így könyvtárkiterjesztésként "tetszőleges" Prolog környezetbe beilleszthető. A Prolog objektumok prototípusokon alapulnak. Az OOP elveiből az öröklődés és az üzenetküldés elve került megvalósításra.
A Prolog objektumai predikátum definíciók gyűjteménye. Ilyen értelemben az Objektum nagyon közeli fogalom a Prolog Modulhoz. Valójában az objektum nem is más, mint a Prolog modul rendszerének kibővítése. Az objektumon belül találhatók:
Az objektumok akár fájlban is elhelyezkedhetnek, ezt a modul rendszerhez hasonlóan kell a rendszernek akkor beolvasnia a közös logikai univerzumba. Az alapértelmezett öröklődés a felülírás (override) módszer, azaz amikor az újradefiniált metódusok/attribútumok eltakarják az ős azonos jellemzőit. Az Objektum univerzumban van egy közös ős objektum, az "object", melyből direkt, vagy indirekt módon minden objektum kreálódik. Az objektumok miután könyvtárban lettek a nyelvhez kiterjesztésként megvalósítva, ezért az alábbi módon "élesíthetők":
Ekkor az alábbi operátorok újradefiniálódnak, az alábbi precedenciával:
Az objektumok deklarációja az alábbi módon történik:
Ahol az objektumazonosító egy Prolog term, a mondatok pedig metódus direktívák. Példa:
Itt a super az ősosztályt jelöli. Ugyanez attribútumokkal:
A nyelvről szinte minden forrásban (külföldi sajtó) dicsérő szavakat lehet olvasni amióta megjelent. Kifejező és nagy erejű objektum orientált rendszerről van szó, amely kombinálja az AI (Mesterséges Inteligencia) és OOP (Objektum Orientált Programozás) hatóerejét. Az objektumok (vagy osztályok) a legmagasabb szinten vannak definiálva. Lehetséges definiálni objektumok rendszerét Prolog++ -szal, manipulálni azokat Prolog szabályok segítségével, ez egy erős eszköz ‘furfangos’ programozók számára. Párhuzamot fedezhetünk fel a C és C++, valamint Prolog és Prolog++ nyelvek között. De amíg a C++ egy procedurális nyelvet kombinál az OOPs-sel, addig a Prolog++ egy dekleratív nyelvet kombinál az OOPs-sel.
Annak ellenére, hogy az interneten szinte mindenhol pozitív kritikákat lehet olvasni a rendszerről, nem mondható, hogy igazán elterjedt volna. Még Prologosok körében sem lett akkora átütő siker, mint például a C-ben dolgozók körében annak idején a C++ megjelenése. Google, Altavizsla, valamint az Index keresőjével próbáltam rábukkanni valamilyen magyar utalásra a programozási nyelvről, de nem jártam sikerrel. Külföldi oldalakon persze már annál inkább találhatunk anyagot, ha viszont nem csak olvasni szeretnénk a PROLOG++ -ról, hanem ki is szeretnénk próbálni a rendszert, akkor az már akadályba ütközik. Nem sikerült fellelnem szabadon letölthető verziót, ami használható lenne, csupán olyanokat, amelyekért komoly pénzeket kellene fizetni. Annak ellenére van ez így, hogy főleg oktatási célokra ajánlják a rendszert. Így sajnos csak a PROLOG++ Reference –re illetve egyéb internetes újságokban megjelent cikkekre tudok támaszkodni nyelvi leírásom során. A PROLOG++ Reference nem csupán a nyelvről szól, hanem általánosságban is sokat foglalkozik az ‘Objektum Orientált Világgal’.
A Prolog++ nyelv egy érett, jól átgondolt termék, amelyet a Logic Programming Associates (LPA) fejlesztett ki 640K MS-DOS számítógépekre 1989-ben. Emiattt hatékony és kompakt run-time rendszer. Azóta az LPA továbbfejlesztette a rendszert Windows és Machintosh gépekre is az igényeknek megfelelően. Így ma már kapható MacOS, MS-DOS, MS-Windows, Windows 95, Windows NT rendszerekkel kompatibilis 2.0 verzió is, persze igen borsos áron. Ezt a rendszert a Studio 4 dobta piacra, amely egy londoni székhelyű vállalat. A Prolog történetének áttekintése:
A következő ábra segít abban, hogy el tudjuk helyezni a nyelvek között a PROLOG++ terméket.
Gyakorlatilag semmi újdonságot nem lehet elmondani az általános Prologhoz képest. Termekről, egyszerű állításoktól, lekérdezésekről valamint levezetési szabályokról beszélhetünk, melyeknek a szintaxisa definiált. A különböző nyelvi elemek teljesen hasonlóan használhatók, mint Prologban.
A Prolog elemei:
Írásmód:
Osztály hierarchiák vannak implementálva jelentésük szerint egy osztályon belül, minden osztályban szerepel a szülő osztály. A metódusok és attribútumok öröklődése ennek segítségével kerül megvalósításra. Így elmondható, hogy a Prolog++ a többszörös öröklődést segíti a szülői függőség segítségével. Minden osztály tulajdonképpen egy template, amely definiálja az általános karakterisztikáját a példánynak. Nézzünk egy egyszerű példát, amelyből látszik, hogy szintaktikailag hogy lehet osztályokat létrehozni, illetve az öröklődést megvalósítani:
A következő kulcsszavak nagyon fontosak:
Prolog++ -ban az objektumokról tulajdonképpen elmondható, hogy nem mások, mint predikátum definíciók gyűjteményei. Ha így közelítjük meg a problémát, akkor kijelenthetjük, hogy az objektum nagyon közel áll a modulhoz. Tehát az objektum tulajdonképpen nem más, mint a modul rendszerének kibővítése.
Az objektumon belül található két ‘dolog’: attribútum és metódus. Fontos még megemlíteni, hogy az objektumok akár fájlban is elhelyezkedhetnek. Elmondható, hogy alapértelmezett öröklődés értelem szerűen a felülírás.
Ahol az objektumok találhatók, azt általában az irodalom objektumok univerzumának szokta nevezni. Ebben az univerzumban van egy közös ős, amelynek a neve ‘object’. Ebből a közös ősből fog minden objektum létrejönni direkt vagy indirekt.
Prolog++ támogatja egyaránt a statikus és a dinamikus objektumokat is. A dinamikus objektumok kreálhatók vagy argumentumok adhatók számukra futásidőben, míg a statikus objektumok fixnek mondhatók és fordítási időben optimalizálódnak.
A C++ nyelv, akárcsak a PROLOG++, egy objektum-orientált kiterjesztése az elődjének. A C++ erősen típusos nyelv, míg a Prolog++ -ról ugyanez nem mondható el. A Prolog++ támogatja a gyors fejlesztést és a prototípus készítést.
A Prolog++ -nak megvan az az előnye, hogy late-binding tulajdonsággal bír, amelynek előnyeit programfejlesztés során élvezhetjük ki. Ez abból adódik, hogy a Prolog egy run-time system. Minden üzenet csak a függvény hívásakor váltódik ki. A C++ -ban két fajtája van a metódusoknak: normál függvény és in-line függvény. Alapértelmezésben a metódusok válaszüzenetei a compiler által definiáltak.
Operator overloading (operátor túlterhelés) a C++ esetében nagyon fontos nyelvi fogásnak tekinthető. Prolog++-ban egy operátor pusztán szintaktikus elem, egy függvénye a relációnak.