Bevezetés az objektum-orientált programozás prototípusába
Az objektumok világa
Egész nap - amikor munkába jársz, ülj az asztalhoz, a kijelölt feladat elvégzésével, a séta és a parkban sétálva - általában a külvilággal kölcsönhatásba léphetsz, anélkül, hogy részletesen megérted azokat a fizikai törvényeket, amelyek irányítják. Megtekintheti a különböző rendszereket, amelyekkel foglalkozik minden nap, mint elemek vagy objektumok. Bonyolultságát olyan valósággá veszi, amely nem igényel bizonyítékot, és inkább összpontosítja a figyelmet ezen objektumokkal való kölcsönhatásra.
Általában az első tárgy-orientált nyelv a Simula modellezési nyelv. Aztán megjelent a Smalltalk, a C ++, a Java és a C #. Abban az időben a legtöbb tárgy-orientált nyelvben az objektumokat osztályok alapján definiálták. Ezt követően a Smalltalk-szerű programozási nyelvek fejlesztői létrehoztak egy alternatív, egyszerűbb objektum-definíciós módszert, amelyet prototípuson alapuló objektum-orientált programozásnak vagy prototípusos objektumorientált programozásnak neveznek.
Az objektumorientált (OO) programozás, amely hasonlóan működő szoftverrendszerek létrehozására törekszik, rendkívül hatékony és hihetetlenül népszerű modellezési eszköz a szoftverfejlesztés számára. A népszerűség azzal magyarázható, hogy mi tükrözi a világra vonatkozó elképzelésünket olyan tárgyak sorozataként, amelyek egymással kölcsönhatásban állhatnak egymással, és amelyek különböző módon manipulálhatók. Az objektumorientált programozás hatékonysága két fő alapelve:
Encapsulation Lehetővé teszi a fejlesztők számára, hogy elrejtsék az adatszerkezetek belső működését, és robusztus programozási interfészeket mutatnak, amelyek moduláris, alkalmazkodó szoftvereket hozhatnak létre. Az inkapsuláció mint elrejtő információ. Öröklés Javítja a kapszulázó motor teljesítményét, lehetővé téve az objektumok számára, hogy örököljék más objektumok kapszulázott viselkedését. Az örökséget az információ megosztása jelenti.
Ezek az elvek jól ismertek a legtöbb fejlesztő számára, mivel az összes közös programnyelv támogatja az objektumorientált programozást (és a legtöbb esetben arra kényszeríti, hogy használja). Annak ellenére, hogy az objektum-orientált nyelvek egy vagy másik formában támogatják a két meghatározott alapelvet, idővel legalább kettő jelent meg az objektumok meghatározásának radikálisan eltérő módjaiban.
Mi a prototípus? Osztályok és prototípusok
Az osztály olyan objektumok elvont definícióját adja meg, amelyekben a megosztott adatstruktúrák és -módszerek az egész osztályra vagy az objektumok gyűjteményére vonatkoznak. Minden objektum az osztály egy példányának felel meg. Az osztályok is felelősek az osztály objektumok definícióik szerinti és (esetleg) felhasználói paraméterek alapján történő osztályozásához.
Egy klasszikus példa a Point osztály és a leszármazottja Point3D használata kétdimenziós és háromdimenziós pontok meghatározására. Az 1. felsorolás bemutatja, hogy a Java kódban szereplő osztályok hogyan láthatók.
Listázás 1. Pont osztály Java-ban
A klasszikus és prototípusú objektumrendszerek között alapvető különbség van. A klasszikus objektumokat elvontan definiálják egy bizonyos fogalmi csoport részeként, és örökölje más osztályok vagy objektumcsoportok jellemzőit. Éppen ellenkezőleg, a prototípus objektumokat kifejezetten speciális objektumokként definiálják, és örökölje más speciális objektumok viselkedését.
Így az osztályokon alapuló objektum-orientált programozási nyelvnek kettős jellege van, amely legalább két alapvető konstrukciót igényel: osztályok és objektumok. Ennek a kettősségnek köszönhetően, ahogy az osztályalapú szoftverek bővülnek, hajlamosak komplex hieroglifák kialakítására. Általános szabály, hogy nem mindig lehet előre megjósolni az osztályok utólagos használatának minden módját, ezért a változások bevezetésének megkönnyítése érdekében szükség van az ilyen osztályok hierarchiájának állandó refaktorálására.
A prototípuson alapuló nyelvek kiküszöbölik, hogy figyelembe kell venni ezt a dualitást, és egyszerűsíteni kell az objektumok közvetlen létrehozását és manipulálását. Az osztályhoz kötődő objektumok hiánya lehetővé teszi a lazán kapcsolt objektumrendszerek létrehozását, amelyek segítik a modularitást és csökkentik a refactoring szükségességét.
- Az LT lábai, mint Emmitté.
- El tudja törni a vonalat, mint Emmitt.
"Igen, pontosan öt perc alatt fut egy mérföldet!"
Ezt a példát a klasszikus modellezéshez illesztheti, ahol meghatározhat egy RunningBack osztályt (back line player), amely örökölte a FootballPlayer osztály (amerikai futballista) attribútumait. Az "LT" és az "emmitt" a RunningBack osztály példányai lennének. Ezek az osztályok a Java kódban láthatók, amint az a 4. listán látható.
Lista 4. Három Java osztály
A klasszikus modell sokkal nagyobb koncepcionális "fejléccel" társul, de nem biztosítja az emmitt és az lt osztályok példáinak részletes ellenőrzését - a prototípus modell használata esetén. (Igazság szerint meg kell jegyeznünk, hogy a FootballPlayer osztály nem 100% -ot igényel, ezért a következő példához képest hasonlítható össze.) Néha az ilyen "overhead" hasznos lehet, de gyakran csak teher.
Létrehozhat egy másik lineBacker objektumot is. örökölte a footballPlayer attribútumait. amint azt a 6. jegyzék mutatja.
6. felsorolás. Objektumok öröklése
Amint a 7. listában látható, viselkedést hozhat a lineBacker és a runningBack objektumokhoz a footballPlayer objektum hozzáadásával.
Listázás 7. Viselkedés hozzáadása
Ebben a példában a footballPlayer-ként dolgozik osztályként. Az Emmitt és az LT objektumokat is létrehozhat, amint a 8. listában látható.
Listázás 8. Objektumok létrehozása
Mivel az objektum örököli az emmitt objektum attribútumait. akkor is dolgozhat emmitt mint osztály, mint a 9. listán látható.
9. felsorolás: öröklés és osztályok
Ezután létrehozhatja ezt az objektumot az új kulcsszóval, ahogyan a Java-kódban is (lásd a 11. listát).
Listázás 11. Objektum létrehozása
Listázás 12. Módszer hozzáadása
A konstruktor funkciók mellett használhatja a pszeudo-klasszikus öröklési modellt is, amint a 13. listában látható.
Pszeudo-klasszikus öröklési modell
Listázás 14. Objektum meghatározása
Ezután a 15. listán látható módon az Object.create segítségével végrehajtja az öröklést.
15. felsorolás: öröklés az Object.create használatával
16. Funkcionális öröklési modell
Az objektumok előállításához a konstruktort használják, az egyes elemek belső definíciójának meghatározásával, és az instancák a specifikációnak a konstruktornak való átadásával jönnek létre, amint azt a 17. jegyzék mutatja.
Listázás 17. Példák létrehozása
következtetés
Ebben a cikkben csak felületes ötletet adunk a prototípusú objektumorientált programozásnak. A prototípus modellt számos más nyelv, például az Én, a Lua, az Io és a REBOL hajtja végre. A prototípus modell bármely nyelven megvalósítható, beleértve a statikusan beírást is. Hasznos lehet minden olyan rendszer kifejlesztéséhez, amely rugalmasságot és egyszerűséget igényel.