OOP fogalmak kezdőknek: mi a polimorfizmus

OOP fogalmak kezdőknek: mi a polimorfizmus

a polimorfizmus szót különböző kontextusokban használják, és leírja azokat a helyzeteket, amelyekben valami több különböző formában fordul elő. A számítástechnikában leírja azt a koncepciót, hogy különböző típusú objektumok ugyanazon a felületen keresztül érhetők el. Minden típus biztosítja a felület saját, független megvalósítását. Ez az objektumorientált programozás (OOP) egyik alapfogalma.,

Ha kíváncsi, hogy egy objektum polimorf-e, egyszerű tesztet végezhet. Ha az objektum sikeresen átmegy több is-a vagy instanceof tesztek, ez polimorf. Amint azt az öröklésről szóló bejegyzésben leírtam, az összes Java osztály kiterjeszti az osztályobjektumot. Ennek köszönhetően a Java összes objektuma polimorf, mert legalább két ellenőrzést végez.,

a Különböző típusú polimorfizmus

támogatja a Java 2 típusú polimorfizmus:

  • statikus vagy compile-time
  • dinamikus

Statikus polimorfizmus

Java, mint sok más objektum-orientált programozási nyelvek, lehetővé teszi, hogy végre több módszerek belül az azonos osztályú, hogy használhatja ugyanazt a nevet, de más-más paramétereket. Ezt nevezik módszertúlterhelésnek, és a polimorfizmus statikus formáját képviseli.,

a paraméterkészleteknek a következő három kritérium legalább egyikében különbözniük kell:

  • eltérő számú paraméterre van szükségük, például az egyik módszer 2, a másik pedig 3 paramétert fogad el.
  • a paraméterek típusának különbözőnek kell lennie, például az egyik módszer elfogadja a karakterláncot, a másik pedig hosszú.
  • eltérő sorrendben kell várniuk a paramétereket, pl. egy metódus egy stringet, egy hosszú, egy másik pedig egy hosszú és egy stringet fogad el. Ez a fajta túlterhelés nem ajánlott, mert megnehezíti az API megértését.,

a legtöbb esetben mindegyik túlterhelt módszer más, de nagyon hasonló funkciót biztosít.

a különböző paraméterkészletek miatt minden módszer eltérő aláírással rendelkezik. Ez lehetővé teszi a fordító számára, hogy azonosítsa, melyik módszert kell hívni, és összekapcsolja azt a módszerhívással. Ezt a megközelítést statikus kötésnek vagy statikus polimorfizmusnak nevezik.

vessünk egy pillantást egy példára.

egy egyszerű példa a statikus polimorfizmusra

ugyanazt a CoffeeMachine projektet használom,mint a sorozat korábbi hozzászólásaiban. Klónozhatja a https://github.com/thjanssen/Stackify-OopInheritancecímen.,

a BasicCoffeeMachine osztály két módszert valósít meg a brewCoffee névvel. Az első egy CoffeeSelection típusú paramétert fogad el. A másik módszer két paramétert, egy Kávétkiválasztást, valamint egy int-t fogad el.

Most, amikor ezen módszerek egyikét hívja, a megadott paraméterkészlet azonosítja azt a módszert, amelyet meg kell hívni.

a következő kódrészletben csak a CoffeeSelection objektummal hívom a módszert. Fordításkor a Java fordító ezt a metódushívást a brewCoffee(CoffeeSelection selection) metódushoz köti.,

BasicCoffeeMachine coffeeMachine = createCoffeeMachine();coffeeMachine.brewCoffee(CoffeeSelection.FILTER_COFFEE);

ha megváltoztatom ezt a kódot, és a brewCoffee metódust CoffeeSelection objektummal és int-vel hívom, a fordító a metódushívást a másik brewCoffee(CoffeeSelection selection, int number) metódushoz köti.

dinamikus polimorfizmus

a polimorfizmus ezen formája nem teszi lehetővé a fordító számára a végrehajtott módszer meghatározását. A JVM-nek futásidőben kell ezt tennie.

egy öröklési hierarchián belül egy alosztály felülírhatja a szuperosztály módszerét. Ez lehetővé teszi az alosztály fejlesztőjének, hogy testreszabja vagy teljesen kicserélje a módszer viselkedését.,

a polimorfizmus egy formáját is létrehozza. Mindkét, a szuper – és alosztály által implementált módszer azonos nevet és paramétereket tartalmaz, de eltérő funkcionalitást biztosít.

vessünk egy pillantást egy másik példára a CoffeeMachine projektből.

az öröklési hierarchiában felülírott módszer

a Basiccoffeemachine osztály a PremiumCoffeeMachine osztály szuperosztálya.

mindkét osztály biztosítja a brewCoffee(CoffeeSelection selection) módszer végrehajtását.,

ha elolvassa az OOP koncepció örökléséről szóló bejegyzést, akkor már ismeri a brewCoffee módszer két megvalósítását. A BasicCoffeeMachine csak támogatja a Kávétkiválasztás.FILTER_COFFEE. A premiumcoffeemachine osztály brewCoffee módszere támogatja a Coffeeselectiont.Eszpresszó. Ha bármilyen más CoffeeSelection-rel hívják, akkor a Super kulcsszót használja a hívás delegálásához a superclass-hez.,

késői kötés

ha ilyen öröklési hierarchiát szeretne használni a projektben, akkor képesnek kell lennie arra, hogy válaszoljon a következő kérdésre: melyik módszert hívja a JVM?

amit csak futásidőben lehet megválaszolni, mert attól függ, hogy melyik objektumra hívják a módszert. A Hivatkozás típusa, amelyet a kódban láthat, irreleváns. Meg kell különböztetni a három általános forgatókönyvet:

  1. az objektum a superclass típusú lesz hivatkozni, mint a superclass., Tehát ennek a bejegyzésnek a példájában egy BasicCoffeeMachine objektumot hivatkoznak BasicCoffeeMachine-ként.
  2. az objektum az alosztály típusához tartozik, és alosztályként hivatkoznak rá. A példában ezt a bejegyzést, PremiumCoffeeMachine objektum lesz hivatkozni, mint egy PremiumCoffeeMachine.
  3. az objektum az alosztály típusához tartozik, és szuperosztályként hivatkoznak rá. A CoffeeMachine példa, PremiumCoffeeMachine objektum lesz hivatkoznak, mint egy BasicCoffeeMachine.
Superclass hivatkozni, mint a superclass

az első forgatókönyv nagyon egyszerű., Ha egy BasicCoffeeMachine objektumot instantálsz, és egy BasicCoffeeMachine típusú változóban tárolod, a JVM a brewCoffee módszert fogja hívni a BasicCoffeeMachine osztályban. Tehát csak kávét főzhetkiválasztás.FILTER_COFFEE.

alosztály hivatkoznak az alosztály

a második forgatókönyv hasonló. De ezúttal bemutatok egy PremiumCoffeeMachine-t, és PremiumCoffeeMachine-ként hivatkozom rá. Ebben az esetben a JVM a PremiumCoffeeMachine osztály brewCoffee módszerét hívja fel, amely támogatja a Kávéválasztást.Eszpresszó.,

a szuperosztályként hivatkozott alosztály

Ez a legérdekesebb forgatókönyv, és a fő ok, amiért ilyen részletekben magyarázom a dinamikus polimorfizmust.

amikor egy PremiumCoffeeMachine objektumot instantálsz és hozzárendeled a BasicCoffeeMachine coffeeMachine változóhoz, akkor is egy PremiumCoffeeMachine objektum. Csak úgy néz ki, mint egy Alapkoffeemachine.

a fordító nem látja ezt a kódban, csak a BasicCoffeeMachine osztály által biztosított módszereket használhatja., De ha a brewcoffee módszert a coffeeMachine változóra hívjuk, a JVM tudja, hogy ez egy PremiumCoffeeMachine típusú objektum, és végrehajtja a felülbírált módszert. Ezt késői kötésnek nevezik.

összefoglaló

a polimorfizmus az OOP nyelvek egyik alapfogalma. Leírja azt a koncepciót, hogy különböző osztályok használhatók ugyanazzal a felülettel. Ezen osztályok mindegyike biztosítja a felület saját megvalósítását.

A Java kétféle polimorfizmust támogat. Túlterhelhet egy módszert különböző paraméterkészletekkel., Ezt statikus polimorfizmusnak nevezik, mivel a fordító statikusan kötődik a módszerhíváshoz egy adott módszerhez.

egy öröklési hierarchián belül egy alosztály felülírhatja a szuperosztály módszerét. Ha példányosítja az alosztályt, a JVM mindig a felülbírált módszert fogja hívni, még akkor is, ha az alosztályt a szuperosztályába helyezi. Ezt dinamikus polimorfizmusnak nevezik.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük