Prototípus programozás 1

Összehasonlítás az osztályorientált megközelítéssel

Az "osztály" fogalmán alapuló nyelveken az objektumok két fő típusra oszthatók: osztályok és példák. Az osztály meghatározza a struktúrát és a funkcionalitást (viselkedést), ugyanazt az osztály minden példányát. Egy példa egy adathordozó - azaz van egy állapot. az osztály által adott viselkedésnek megfelelően változik.

A prototípus-programozás támogatói gyakran azzal érvelnek, hogy az osztályokon alapuló nyelvek túlzott koncentrációhoz vezetnek az osztályok taxonómiájához és a köztük lévő kapcsolathoz. Ezzel ellentétben, a prototípus összpontosít néhány (kicsi) "minta" viselkedésére, amelyeket azután "alap" objektumokként osztályoznak és más objektumok létrehozására használják. Számos prototípus-orientált rendszer támogatja a prototípusok változását a programfuttatás során, míg az osztályorientált rendszerek (pl. Smalltalk) csak kis része lehetővé teszi az osztályok dinamikus megváltoztatását.

Bár a prototípus-alapú rendszerek túlnyomó többsége dinamikus gépeléssel rendelkező, értelmezett nyelveken alapul, technikailag lehetséges a prototípus készítése statikus típusú ellenőrzésű nyelvekhez. Az Omega nyelv egy példa erre a rendszerre.

Objektumok tervezése

Az osztály-orientált nyelveknél új példányt hoz létre az osztály-konstruktor (esetleg paraméterek készítésével) felhívásával. A kapott példány szerkezete és viselkedése határozottan osztályozza az osztályát.

A prototípus-orientált rendszereknél két módszer létezik egy új objektum létrehozására: meglévő objektum klónozása vagy objektum létrehozása a semmiből. Objektum létrehozása a semmiből, a programozó rendelkezik azzal a szintaktikai eszközzel, hogy tulajdonságokat és módszereket ad hozzá az objektumhoz. A jövőben egy teljes másolatot lehet beszerezni a létrejött objektumból, egy klónból. A klónozás során a másolat örökölte prototípusának minden jellemzőjét, de attól a pillanattól kezdve független lesz és megváltoztatható. Egyes implementációkban a másolatok tárolják a prototípus objektumokra való hivatkozásokat, és ezek egy részét átruházzák rájuk; míg a prototípus megváltoztatása hatással lehet az összes másolatára. Más implementációkban az új objektumok teljesen függetlenek a prototípusuktól. Mindkét esetet vegye figyelembe.

felhatalmazás

Prototípus-orientált nyelveken, amelyek küldetést használnak. A végrehajtási környezet képes módszeres hívások küldésére (vagy keresni a szükséges adatokat) egyszerűen a mutatók átruházásának láncolatával (az objektumról a prototípusra), amíg ez megegyezik. Az "osztálypéldány" viszonylattól eltérően a "prototípus-leszármazottak" reláció nem követeli meg, hogy a leszármazott objektumok megőrzik a szerkezeti hasonlóságukat a prototípusukkal. Idővel alkalmazkodhatnak és javíthatók, de nincs szükség a prototípus újratervezésére. Fontos, hogy adjon hozzá / törölje / módosítsa nemcsak az adatokat, hanem a funkciókat is, míg a funkciók szintén az első szint objektumai. Ennek eredményeképpen a legtöbb prototípus-orientált nyelv a "rés" (cellák) objektum adatainak és módszereinek hívását jelenti.

lépcsőzetes

Ennek a megközelítésnek az előnyei közé tartozik az a tény, hogy egy másolat készítője megváltoztathatja anélkül, hogy félne a mellékhatásoktól az ő ősei utódai között. A diszpécser költségei drasztikusan csökkentek, mivel nem szükséges megkerülni az esetleges küldöttek teljes láncolatát egy megfelelő rés (módszer vagy attribútum) keresésére.

További hátrány, hogy a legegyszerűbb végrehajtásának ezt a modellt vezet fokozott (szemben a felhatalmazás modell) memória-felhasználás, mivel minden egyes klón, amíg meg nem változtatja, tartalmazni fog egy példányt a prototípus adatokat. Azonban ez a probléma megoldható optimális a módosítatlan adatok és a használata „lusta másolat” - ben használt Kevo.

A prototípus-megközelítést kritizáló osztályorientált objektummodellek támogatói gyakran aggasztják ugyanazokat a problémákat, amelyekre a statikus gépírás kedvelői aggódnak a dinamikus gépeléssel rendelkező nyelvek miatt. Különösen a viták olyan témák köré csoportosulnak, mint a helyesség. biztonságát. a program kiszámíthatóságát és hatékonyságát.

Ami az első három pontot, akkor az osztályok gyakran tekintik a típusok (és valóban, ahogy a legtöbb objektum-orientált statikusan típusos nyelv), és azt feltételezik, hogy az osztályok adnia bizonyos megállapodásokat, valamint biztosítsák, hogy a példányok is jól viselkednek bizonyos módon .

irodalom

Kapcsolódó cikkek