Öröklés vs összetétel
Az öröklés és az összetétel az OOP (Object Oriented Programming) két fontos fogalma. Egyszerűen fogalmazva, mind az összetétel, mind az öröklés foglalkozik az osztály további tulajdonságainak vagy viselkedésének biztosításával. Az öröklés az a képesség, hogy egy osztály örököljön tulajdonságokat és viselkedést egy szülőosztálytól annak kiterjesztésével. Másrészt a kompozíció egy osztály azon képessége, hogy tag-adatokként különféle osztályok objektumait tartalmazza.
Mi az örökség??
Mint fentebb említettük, az öröklődés az a képesség, hogy egy osztály örököljön tulajdonságokat és viselkedést egy szülőosztálytól annak kiterjesztésével. Az öröklés alapvetően a kód újbóli felhasználását biztosítja azáltal, hogy lehetővé teszi a meglévő osztály tulajdonságainak és viselkedésének kibővítését egy újonnan meghatározott osztály által. Ha az A osztály kiterjeszti a B-t, akkor a B osztályt szülőosztálynak (vagy szuperosztálynak) nevezzük, és az A osztályt gyermekosztálynak (vagy származtatott osztálynak / alosztálynak) nevezzük. Ebben a példahelyzetben az A osztály a (B) szuper osztály összes nyilvános és védett attribútumát és módszerét örökli. Az alosztály opcionálisan felülbírálhatja (új vagy kibővített funkciókat biztosíthat a módszerekhez) a szülőosztálytól örökölt viselkedést.
Az öröklés egy „van-egy” kapcsolatot képvisel az OOP-ban. Ez lényegében azt jelenti, hogy A szintén B. Más szavakkal, B lehet egy osztály, egy általános valós entitás általános leírásával, de A meghatároz egy bizonyos specializációt. Valós programozási problémák esetén a Személy osztály kibővíthető lenne, hogy létrehozzon Munkavállalói osztályt. Ezt nevezzük specializációnak. De előbb is létrehozhatja a Munkavállalói osztályt, majd aztán Személyosztályra is általánosíthatja (azaz általánosíthatja). Ebben a példában a Munkavállaló a Személy összes tulajdonságával és magatartásával rendelkezik (azaz a Munkavállaló szintén Személy), és tartalmazhat további funkciókat (tehát a Személy nem Munkavállaló).
Mi az összetétel??
A kompozíció egy osztály azon képessége, hogy tag-adatokként különféle osztályok objektumait tartalmazza. Például, az A osztály tagként tartalmazhatja a B osztály tárgyát. Itt a B-ben meghatározott összes nyilvános módszer (vagy funkció) végrehajtható az A osztályon belül. Az A osztály válik a konténeré, míg a B osztály a zárt osztálytá. A kompozíciót konténerszállításnak is nevezik. Ebben a példában elmondható, hogy az A osztály B osztályból áll. Az OOP-ban a összetétel „van-egy” kapcsolatot jelent. Fontos megjegyezni, hogy annak ellenére, hogy a tárolónak hozzáférése van a tárolt osztály összes nyilvános módszerének végrehajtásához, nem képes megváltoztatni vagy további funkciókat biztosítani. A valós programozási problémákkal kapcsolatban a TextBox osztályba tartozó objektum szerepelhet az Űrlap osztályban, tehát azt lehet mondani, hogy az űrlap TextBox-ot tartalmaz (vagy alternatívaként az űrlap TextBox-ból áll).
Mi a különbség az öröklés és a összetétel között??
Bár az öröklés és a összetétel két OOP-koncepció, ők teljesen eltérőek abban, amit lehetővé tesznek a programozó számára. Az öröklés az a képesség, hogy egy osztály örökli a tulajdonságokat és a viselkedést egy szülőosztálytól annak kiterjesztésével, míg a Összetétel az osztály azon képessége, hogy tagjai között különböző osztályok objektumait tartalmazza. Ha egy osztály kibővül, akkor az összes nyilvános és védett tulajdonságot / viselkedést örökli, és ezeket az viselkedéseket az alosztály felülbírálhatja. De ha egy osztályt egy másik tartalmaz, akkor a tároló nem képes megváltoztatni vagy hozzáadni viselkedését a tartalomhoz. Az öröklés egy „van-egy” kapcsolatot jelent az OOP-ban, míg a „Összetétel” - „van-egy” kapcsolatot jelent.