A CLU programozási nyelv

Kivételkezelés



8. Objektum-orientált programozás, öröklődés

8.1. Objektumok
8.2. A CLU és az objektum-orientáltság


A CLU objektum-elvű programozási nyelv - elindult azon az úton, mely a mai objektum-orientált nyelvekhez     vezetett, de csak az első lépést tette meg - adatelrejtés, és objektumkezelés. De a legnagyobb lépést, az      öröklődés bevezetését már nem tette meg.

(Érdekes módon a fogalom már létezett a Simula 67-ben - osztályok, öröklődés, stb. -, melyet a szerzők     ismertek, mégsem építették be a nyelvbe, mert saját bevallásuk szerint az öröklődés nem fedte pontosan azt a fogalmat (!), melyre szükségük lett volna. A SmallTalk is létezett már ebben az időben - ez tekinthető talán a mai OOP ősének -, azonban azt a szerzők nem ismerték akkor. Lehet, hogy ennek köszönhetjük a genericet.)
 

8.1 Objektumok

Minden CLU program objektumokon végez műveleteket (a beépített típusokhoz is léteznek objektumok). Az objektumoknak van értéke. Például egy int típusú objektum értéke lehet 3. Egy tömb objektum értéke az alsó és felső indexhatára, valamint az elemei. Minden CLU-beli objektumhoz tartozik egy adattípus, amely meghatározza, hogy milyen értékei lehetnek (típusinvariáns), és milyen műveleteket végezhetünk ezeken az értékeken (típusműveletek). Az objektumok egy univerzum elemeinektekintendők.
array[T]$new
művelet például létrehoz az objektum-univerzumban egy új tömb objektumot. Elméletben az objektumok örök életűek, a valóságban azonban a CLU szemétgyűjtést végez, és felszabadítja azokat a memóriaterületeket, amelyekre nem történik hivatkozás. Egy objektum akkor elérhető, ha a program valamely változója vagy más elérhető objektum hivatkozik rá. Minden objektum különbözik a többitől és egyedi névvel rendelkezik, amellyel hivatkozni lehet rá. Egy objektum értéke nem tartalmazhat fizikailag másik objektumot, csak a másik objektumra vonatkozó referenciát (a másik objektum nevét). Ezzel lehetséges ciklikus hivatkozási láncot építeni az objektumok között, azaz egy objektum közvetve vagy közvetlenül hivatkozhat önmagára. Így pointerek explicit használata nélkül definiálhatunk rekurzív adatstruktúrákat. Több objektum hivatkozhat ugyanarra az objektumra, ekkor a többszörösen hivatkozott objektumot osztottnak nevezzük.

A CLU-ban az objektumok két nagy csoportra oszthatók:

Például az int és a bool objektumok az immutable, a tömb objektumok a mutable csoportba tartoznak. Hogy egy objektum mutable vagy immutable, a hozzárendelt típus határozza meg.

8.2. A CLU és az objektum-orientáltság

A CLU objektumalapú nyelv, mivel a nyelv kulcsfontosságú részét képezik az objektumok. A kifejezések objektumokká értékelődnek ki, eljárások objektumokat vesznek át paraméterként, és objektumokat adnak vissza. A változókat az objektumokra való hivatkozásra használjuk. Az objektumokkal ellentétben változókat soha nem használhat több modul osztott módon.
De a CLU nem objektum-orientált: nincs benne öröklődés, illetve az egyes típusok műveleteit sem lehet felüldefiniálni. (Túlterhelés sincs: nem lehet két azonos nevű, de eltérő paraméterezésű művelete egy típusnak.)