Metaobject - Metaobject
A számítástechnikában a metaobjektum olyan objektum, amely manipulálja, létrehozza, leírja vagy megvalósítja az objektumokat (beleértve önmagát is). Az objektum, amelyre a metaobjektum tartozik, alapobjektumnak hívják. Néhány információ, hogy a metaobjektum meghatározhat tartalmazza az alapot objektum típusát , felület , osztály , módszerek , tulajdonságok , elemzési fa stb metaobjektum példái a számítástechnika fogalmát tükrözi , ahol a rendszer hozzáférés (általában futásidőben) annak saját belső felépítése. A reflexió lehetővé teszi a rendszer számára, hogy menet közben lényegében átírja önmagát, megváltoztassa saját végrehajtását végrehajtása közben.
Metaobject protokoll
A metaobjektum protokoll (MOP) biztosítja a szókincset ( protokoll ) az objektumok rendszereinek felépítéséhez és viselkedéséhez való hozzáféréshez és manipulálásához. A metaobjektum protokoll jellemző funkciói a következők:
- Hozzon létre vagy töröljön egy új osztályt
- Hozzon létre egy új tulajdonságot vagy metódust
- Az osztály öröklődésének előidézése egy másik osztálytól ("osztálystruktúra módosítása")
- Generálja vagy módosítsa az osztály metódusait meghatározó kódot
A Metaobject protokoll ellentétes Bertrand Meyer nyitott / zárt elvével , amely szerint a szoftverobjektum-rendszereknek nyitva kell állniuk a kiterjesztéshez, de módosításra zárva kell lenniük . Ez az elv hatékonyan megkülönbözteti az objektum kiterjesztését hozzáadásával és az objektum módosítását az újradefiniálásával, azt javasolva, hogy az előbbi kívánatos minőségű legyen ("az objektumoknak bővíthetőnek kell lenniük, hogy megfeleljenek a jövőbeni felhasználási esetek követelményeinek "), míg a ez utóbbi nem kívánatos ("az objektumoknak stabil felületet kell biztosítaniuk, amely nem függ össze összefoglaló felülvizsgálattal "). A Metaobject protokoll ezzel szemben átláthatóan tárja fel az objektumok belső összetételét és az egész objektumrendszert maga a rendszer szempontjából. A gyakorlatban ez azt jelenti, hogy a programozók objektumokat használhatnak önmaguk újradefiniálására, esetleg meglehetősen összetett módon.
Ezenkívül a metaobject protokoll nem csupán egy interfész egy "mögöttes" megvalósításhoz; Inkább keresztül metaobjektum protokoll az objektum rendszer rekurzívan megvalósított szempontjából a meta -object rendszert, amely maga elméletileg végrehajtani szempontjából egy meta -metaobject rendszert, és így tovább, amíg egy tetszőleges bázis esetén (konzisztens állapotban az objektum rendszer ) meghatározása, a protokoll mint olyan rekurzív funkcionális viszony ezen megvalósítási szintek között.
Végrehajtási tárgy rendszerek oly módon megnyitja a lehetőséget a radikális diszkrecionális újratervezése, amely mélyen a rugalmasságot, de bevezetésével esetleg bonyolult vagy nehezen érthető metastabilitás kérdések (például az objektum rendszer nem destruktív frissíti saját metaobjektum protokoll - belső ön- reprezentáció - de egyes frissítések potenciális destruktivitását nem triviális megjósolni, és nehéz lehet megindokolni), attól függően, hogy milyen rekurzív mélységig terjednek a kívánt módosítások. Ezért a metaobjektum protokollt, ha egy nyelven van, általában takarékosan és speciális célokra használják, például olyan szoftverek számára, amelyek kifinomult módon átalakítják más szoftvereket vagy önmagukat, például a fordított tervezés során.
Futásidejű és fordítási idő
Ha a fordítás futás közben nem érhető el, további bonyodalmak merülhetnek fel a metaobject protokoll megvalósításában. Például meg lehet változtatni a típushierarchiát egy ilyen protokollal, de ez problémákat okozhat egy alternatív osztálymodell-definícióval összeállított kód számára. Egyes környezetek erre innovatív megoldásokat találtak, például a metaobjektum problémáinak fordításkor történő kezelésével. Jó példa erre az OpenC ++ . A szemantikus web objektum-orientált modell dinamikusabb, mint a legtöbb szabványos objektumrendszer, és összhangban van a futásidejű metaobjektum protokollokkal. Például a szemantikus webes modellekben az osztályok várhatóan megváltoztatják egymás közötti kapcsolataikat, és van egy speciális következtetési motor , amelyet osztályozónak hívnak, és amely képes érvényesíteni és elemezni a fejlődő osztálymodelleket.
Használat
Az első metaobjektum-protokoll a Xerox PARC- nél kifejlesztett Smalltalk objektum-orientált programozási nyelvben volt . A Common Lisp Object System (CLOS) később jött, és befolyásolta a Smalltalk protokoll, valamint Brian C. Smith eredeti tanulmányai a 3-Lisp-ről, mint az értékelők végtelen tornyáról. A CLOS modell a Smalltalk modellel ellentétben lehetővé teszi, hogy egy osztálynak több szuperosztálya legyen ; ez további bonyolultságot vet fel olyan kérdésekben, mint például az osztályhierarchia vonalának feloldása valamilyen objektumpéldányon. A CLOS lehetővé teszi a dinamikus multimódos küldést is , amelyet általános funkciók kezelnek, nem pedig az üzenet továbbítása, mint a Smalltalk egyetlen küldetésében . A legbefolyásosabb könyv, amely a Common Lisp metaobject protokolljának szemantikáját és megvalósítását írja le, a The Art of the Metaobject Protocol , Gregor Kiczales et al.
A metaobjektum protokollokat széleskörűen használják a szoftvertervezési alkalmazásokban is. Gyakorlatilag minden kereskedelmi CASE, átalakítási és integrált fejlesztési környezetben létezik valamilyen metaobjektum protokoll, amely a tervezési műtárgyakat ábrázolja és manipulálja.
A metaobjektum-protokoll az aspektus-orientált programozás egyik módja . A MOP-ok korai alapítói közül sokan, köztük Gregor Kiczales , azóta a szempont-orientált programozás elsődleges szószólói. Kiczales és mtsai. A PARC vettek fel, hogy tervezzen AspectJ a Java , a nyelvet, amely nem rendelkezik a natív metaobjektum protokollt.
Lásd még
- Fajta (típuselmélet)
- Metaclass
- Javassist
- Csatlakozzon a JavaScript meta objektum rendszerhez
- Moose Perl meta objektumrendszer
- OpenC ++
- OpenJava
- Egységes modellezési nyelv : UML
- Groovy
Hivatkozások
Külső linkek
- A Guile MOP specifikáció (GOOPS, Tiny CLOS alapján)
- Metaobjects és a Metaobject Protocol
- Common Lisp Object System Metaobject Protocol (két fejezetet tartalmaz a The Art of the Metaobject Protocol-ból )
- Python 2.6 Metaprogramozás