Öröklés kontra konténerhajózás
Az öröklődés és a tároló két fontos fogalom az OOP-ban (objektumorientált programozási példa: C++). Egyszerűen fogalmazva, mind a tároló, mind az öröklődés azzal foglalkozik, hogy további tulajdonságokat vagy viselkedést biztosítson egy osztálynak. Az öröklődés egy osztály azon képessége, hogy tulajdonságait és viselkedését örökölje a szülőosztálytól annak kiterjesztésével. Másrészt a konténer az osztály azon képessége, hogy különböző osztályú objektumokat tartalmazzon tagadatokként.
Mi az öröklés?
Amint fentebb említettük, az öröklődés egy osztály azon képessége, hogy tulajdonságait és viselkedését örökölje egy szülőosztálytól annak kiterjesztésével. Az öröklődés lényegében a kód újrafelhasználását biztosítja azáltal, hogy lehetővé teszi egy meglévő osztály tulajdonságainak és viselkedésének kiterjesztését egy újonnan definiált osztállyal. Ha az A osztály kiterjeszti a B-t, akkor a B osztályt szülőosztálynak (vagy szuperosztálynak), az A osztályt pedig gyermekosztálynak (vagy származtatott osztálynak/alosztálynak) nevezzük. Ebben a példahelyzetben az A osztály örökli a szuperosztály (B) összes nyilvános és védett attribútumait és metódusát. Az alosztály opcionálisan felülbírálhatja (új vagy bővített funkcionalitást biztosít a metódusoknak) a szülőosztálytól örökölt viselkedést. Az öröklődés egy „is-a” kapcsolatot jelent az OOP-ban. Ez lényegében azt jelenti, hogy A egyben B is. Más szóval, B lehet az az osztály, amely egy bizonyos valós világbeli entitás általános leírását tartalmazza, de A egy bizonyos specializációt határoz meg. Valós programozási problémák esetén a Személy osztályt ki lehet terjeszteni az Employee osztály létrehozására. Ezt nevezik specializációnak. De először létrehozhatja az Employee osztályt, majd általánosíthatja azt egy Személy osztályra is (pl.e. általánosítás). Ebben a példában a Munkavállaló a Személy összes tulajdonságával és viselkedésével rendelkezik (azaz az alkalmazott egyben személy is), és tartalmazhat további funkciókat is (tehát a személy nem alkalmazott).
Mi az a konténerkezelés?
A konténer az osztály azon képessége, hogy különböző osztályokhoz tartozó objektumokat tartalmazzon tagadatként. Például az A osztály tartalmazhat egy B osztályú objektumot tagként. Itt a B-ben definiált összes nyilvános metódus (vagy függvény) végrehajtható az A osztályon belül. Az A osztály lesz a tároló, míg a B osztály a beépített osztály. A tárolóedényt összetételnek is nevezik. Ebben a példában elmondható, hogy az A osztály a B osztályból áll. Az OOP-ban a Containership egy „has-a” kapcsolatot jelent. Fontos megjegyezni, hogy bár a tárolónak hozzáférése van a benne fogl alt osztály összes nyilvános metódusának végrehajtásához, nem képes megváltoztatni vagy további funkciókat biztosítani. Amikor egy valós programozási problémáról van szó, egy TextBox osztályú objektum szerepelhet a Form osztályban, és így elmondható, hogy egy Form tartalmaz egy TextBox-ot (vagy egy másik lehetőség, hogy az űrlap egy TextBoxból áll).
Különbség az öröklés és a konténer között
Bár az öröklődés és a konténerezés két OOP-koncepció, meglehetősen különböznek abban, amit a programozó elérhet. Az öröklődés egy osztály azon képessége, hogy tulajdonságait és viselkedését örökölje egy szülőosztálytól annak kiterjesztésével, míg a Containership egy osztály azon képessége, hogy különböző osztályok objektumait tagadatokként tartalmazza. Ha egy osztályt kiterjesztenek, az örökli az összes nyilvános és védett tulajdonságot/viselkedést, és ezeket a viselkedéseket az alosztály felülírhatja. De ha egy osztályt egy másik tartalmaz, a tároló nem képes megváltoztatni vagy hozzáadni a benne lévő viselkedést. Az öröklődés egy „is-a” kapcsolatot jelent az OOP-ban, míg a Containership a „has-a” kapcsolatot.