A Kempelen Farkas Digitális Tankönyvtár/vagy más megjelenítő által közvetített digitális tartalmat a felhasználó a szerzői jogról szóló 1999. évi LXXVI. tv. 33. paragrafus (4) bekezdésében meghatározott oktatási, illetve tudományos kutatási célra használhatja fel. A felhasználó a digitális tartalmat képernyőn megjelenítheti, letöltheti, arról elektronikus adathordozóra vagy papíralapon másolatot készíthet, adatrögzítő rendszerében tárolhatja. A Kempelen Farkas Digitális Tankönyvtár/vagy más megjelenítő weblapján található digitális tartalmak üzletszerű felhasználása tilos, valamint kizárt a digitális tartalom módosítása és átdolgozása, illetve az ilyen módon keletkezett származékos anyag további felhasználása.

3.2.6. Metaosztály

Az adatokra vonatkozó adatokat metaadatoknak nevezzük. Gyakran találkozunk ilyenekkel az életben, például szótárakat és könyvtári katalógusokat böngészve. Amikor egy olyan adattáblázatot készítünk, amelyben felsoroljuk a megyéket és a megyeszékhelyeket, mint például Baranya – Pécs, akkor adatokat rögzítünk. Az az információ, hogy a megyének van egy székhelye már metaadatnak tekinthető.

Az objektumosztály az objektumok egy halmazának leírása, következésképp metaadat. Szélesebb értelemben véve bármely minta metaadat, a minta és annak egy példája a példányosodás egy formája, a példányosodás pedig reláció. Objektum-diagramokon az osztály és a példány közötti kapcsolatot is szokták jelölni, ahol a példányosodás relációt pontozott vonal ábrázolja (3.44. ábra).

3.44. ábra

3.44. ábra

Bizonyos értelemben az objektumosztály maga is rendelkezik az objektum tulajdonságaival. Természetesen nem a modellezendő valós világ objektumaként, hanem a modellre vonatkozó metaobjektumként. A legtöbb objektum-orientált implementáció megengedi ugyanis, hogy objektumokat futási időben hozzunk létre, illetve semmisítsünk meg. Az osztály objektum jellegének legközvetlenebb bizonyítéka, hogy az objektumot létrehozó üzenet nem szólhat magának az objektumnak, hiszen az még nincs. Ha üzenünk valakinek, hogy "adj_egy_ilyen _objektumot" akkor az a valaki csakis objektum lehet, mert üzenet vételére csak objektum képes. Az objektumot leíró osztály tehát egyben objektum is. Ha objektum, akkor kell lenni olyan osztálynak, amelynek ő egy példánya. Ez az úgynevezett metaosztály (metaclass).

Az osztály attribútumainak tekintjük azokat az adatokat, amelyek az osztály, mint objektumgyár tevékenységével, a példányosítással kapcsolatosak. Ilyen lehet például, hogy hány példány készült egy adott objektumból. Az osztályattribútum fogalmát szélesíthetjük, ha beleértjük a létrehozandó objektumok attribútumaival kapcsolatos adatokat is. Ezzel a lehetőséggel élve az osztályt utasíthatjuk arra, hogy az általa létrehozott objektumok bizonyos attribútumainak kezdőértékét megváltoztassa, vagy változtasson a kezdőértéket meghatározó módszeren.

Az osztályműveletek azok a metódusok, amelyeket az osztály, mint objektum a hozzáküldött üzenetekre válaszul végrehajt. Egy osztály-műveletnek biztosan kell léteznie, ez általában a konstrukciónak (constructor) nevezett művelet, amely a példányosítást végzi. Definiálhatók olyan osztály-műveletek, amelyek a célja a példányosítással kapcsolatosan gyűjtött adatok lekérdezése, vagy az osztály által létrehozott objektumok struktúrájának vagy metódusainak vizsgálata. Célszerű lehet az attribútumok kezdőértékeinek lekérdezése is. Különösen akkor, ha olyan osztályműveletet is bevezetünk, amellyel üzenünk az osztálynak, hogy mostantól kezdve minden objektumot új kezdőértékkel hozzon létre.

A 3.45. ábrán a példányosodást pontozott, az öröklési relációt folytonos vonallal jelölve összefoglaljuk az elmondottakat. Induljunk ki a Blöki nevet viselő objektumból. Ez egy példány, amely a Kutya osztálynak a megtestesülése. Tehát a Kutya egyfelől osztály. Másfelől a Kutya objektum is, hiszen üzenetet tudtunk küldeni neki, amelynek hatására létrehozta a Blöki példányt. Tovább vizsgálva a Kutyát, amely egyszerre objektum és osztály is, elmondhatjuk, hogy objektum minőségében neki is egy osztály példányának kell lennie. Ez az osztály az Osztály. Itt elvarrjuk a szálat, és nem tételezzük fel, hogy a Kutya osztály is egy üzenet hatására keletkezett az Osztályból. Az Osztályra azt mondjuk, hogy ez a metaosztály. Az Osztály definiálja, hogy rendszerünkben milyen osztály-attribútumokkal és osztály-műveletekkel rendelkezzenek az osztályok. Az ábrán az Objektum osztály jelképezi az objektum szerkezetének legáltalánosabb definícióját tartalmazó osztályt, amelynek minden más osztály leszármazottja.

3.45. ábra

3.45. ábra

A fenti példa gondolatmenetét folytatva elérkezünk egy meglehetősen sikamlós területre. Olyan modellhez juthatunk, amelyben megengedett, hogy futás közben utasítsuk az osztályunkat arra, hogy a korábbiakhoz képest eltérő attribútumokkal generálja az új objektumokat, azaz megváltoztathatjuk azt a mintát, amelynek példánya az objektum. Vagyis maga a minta is változóvá alakulhat át. A történetet folytathatjuk, úgy is, hogy olyat üzenünk, hogy ettől kezdve generáljon a kutyáknak adóazonosítót valamint bővítse a kutyák metódusait az adószám lekérdezésével, amely metódust az üzenet részeként megküldünk.

Különösen izgalmas kérdés, hogy mi annak az osztálynak a minimális művelethalmaza (viselkedéshalmaz), amely már elégséges ahhoz, hogy a futás közben kapott üzenetek alapján tetszőleges struktúrájú és viselkedésű objektumot legyen képes generálni. A kérdés a korábban már említett kötési idővel kapcsolatos. Kötési időnek tekintettük azt a pillanatot, amikor valamely programbeli elem értéke meghatározódik. Egy ilyen modellben nemcsak a metódusok, hanem már a struktúrák késői kötéséről is beszélnünk kellene.

Nyilvánvaló, hogy a fenti elven működő szoftvernek az egész programfejlesztést át kellene fognia és biztosítania a keletkező objektumok valamiféle konzisztenciáját. Ez pedig alighanem egy CASE (számítógéppel támogatott szoftver fejlesztés, Computer Aided Software Engineering) vagy azzal rokon fejlesztői eszköz lehet.