next up previous contents index
Next: Sloty Up: LogTalk: popis a ukázky Previous: LogTalk: popis a ukázky   Obsah   Index

Architektura

Reflexivní architektura Logtalku může být popsána následujícími požadavky:

  1. Každý objekt je instancí nějaké třídy, ke které náleží.
  2. Třída je objekt definovaný jinou třídou (metatřídou).
  3. Třída může být popsána specializací nějaké jiné existující třídy (nadtřída)
  4. Objekt se skládá z množiny slotů, definujících svůj stav a chování a z vnitřní základny.
  5. Sloty objektů jsou deklarovány svojí třídou a všemi nadtřídami této třídy, tak jak to definuje mechanismus dědění.
  6. Reprezentace a chování slotů je definováno objektem stejného typu jako příslušný slot.
  7. Slot je brán delegací zamýšlené operace svým typem, při použití zásobníkového objektu jako klienta.
  8. Každý výpočet je započat zasláním zprávy nějakému objektu.
Jak je vidět, objekt má strukturovanou část tvořenou sloty a nestrukturovanou část, svoji vnitřní základnu. Množina slotů je strukturovaná, protože každý je explicitně deklarován třídou. Obsah vnitřní báze není vázán žádným typem deklarace. Díky tomu je interní báze privátní a lokální ke každému objektu. Je normálně používána třídami k uchovávání pomocných definicí vyskytujících se v metodách (blok chování).

Delegace (na základě osmého požadavku) je spravována mechanismem zasílání zpráv, ve kterém objasníte klienta požadované operace. Protože sloty lze manipulovat pouze díky delegaci, zdá se tento mechanismus být elementárním způsobem zasílání zpráv. Delegace nemusí být používána pouze pro manipulaci se sloty, ale může být též použita pro zjištění odesílatele zprávy kdykoliv to potřebujete. Jednodušší zasílání zpráv, ve kterém není známo, kdo je odesílatel zprávy má výhodu respektování zapouzdření objektů tím, že se nezmiňuje o typu slotu.

Všimněte si, že v Logtalku je implementována jednoduchá dědičnost: každá třída může mít pouze jednu nadtřídu. Absence vícenásobné dědičnosti je částečně kompenzována mechanismem delegace. Ten prosazuje vytváření nových tříd kompozicí místo specializace.

Zavedení metatříd je pro reflexivní architekturu nezbytné. Nezapomeňme, že o systému říkáme že má reflexivní architekturu [28] pokud obsahuje reprezentaci sebe sama, spojenou příčinně se svým chováním. V případě programovacího jazyka to znamená, že je napsán v tom samém jazyce, který implementuje. V jazycích jako je PROLOG, kde není žádného rozdílu mezi procedurami a daty, je reflexivní architektura implementována kruhovým meta-překladačem7.3. Způsob, jakým je kruhovitý charakter porušen zavádí množinu rysů, které nemohou býti změněny uživatelem.

Tento koncept reflexivity proniká systém Logtalk. Nejdříve ve vztazích mezi základními třídami: Objekt, AbstraktníTřída a Třída. Objekt deklaruje standardní sloty pro všechny objekty. AbstraktníTřída specializuje Objekt sloty, které jsou společné pro všechny třídy. Je to standardní metatřída pro abstraktní třídy. Třída specializuje AbstraktníTřídu přidáváním slotů nezbytných pro zacházení s instancemi. Je to standardní metatřída pro třídy s bezprostředním přístupem. Všechny tři třídy jsou instancemi Třídy. Při prozkoumání této malé hierarchie je vidět, že každá třída má svůj vlastní slot a také slot ostatních dvou tříd, aniž by docházelo k cyklení. Za druhé, oproti většině jiných objektově orientovaných jazyků, co se týče reprezentace a správy slotů, mechanismus zasílání zpráv a přiřazovací operace nejsou primitiva, ale metody definované v objektech. Jsou přístupné k prohlédnutí a modifikaci uživatelem. Zaslání zprávy se skládá vlastně z poslání dvou odlišných zpráv: z jedné pro nalezení metody a druhé ke spuštění metody. Za každou z těchto dvou zpráv se skrývá identický proces hledání a spouštění. Abychom se vyhnuli nekonečným smyčkám, Logtalk definuje dva sloty korespondující se dvěma zprávami zabezpečujícími primitiva, když je proces hledání a spouštění přímo vykonán (bez opětovného třídění pro zaslání dalších zpráv).


next up previous contents index
Next: Sloty Up: LogTalk: popis a ukázky Previous: LogTalk: popis a ukázky   Obsah   Index
Tomáš Kubíček 2002-05-19