A programozás során az újrafelhasználható kód a meglévő szoftverek felhasználása új szoftverek létrehozására az újrafelhasználhatóság elveinek felhasználásával. A kód újrafelhasználhatóságát alapvető produktív funkcionalitásnak tekintik az információs technológia-igényes vállalkozásokban. Objektum-orientált rendszerekben elősegítik az osztályok közötti kapcsolatok létrehozásával. Két alapvető módszer van ezeknek a kapcsolatoknak a létrehozására az objektum-orientált programozásban - öröklés és összetétel. Az öröklés megvalósítása az osztályok összekapcsolásának egyik módja, ám az OOP újfajta kapcsolatot biztosít az osztályok között, az úgynevezett összetétel. Az új és a meglévő osztályok közötti kapcsolat létrehozásával az új osztály örökítheti vagy beágyazhatja a kódot egy vagy több létező osztályból.
Az OOP-ban az öröklés az a módszertan, amellyel az objektum megszerez egy vagy több másik objektum jellemzőit. Ez az egyik legerősebb eszköz a kód újrafelhasználhatóságának az OOP-ban történő megvalósításához. Az öröklés felhasználásával új osztály hozható létre, ha szülei és gyermekei kapcsolatot létesítik a meglévő osztályokkal. Az objektum összetétele az osztály öröklésének alternatívája. Egy másik objektumon belüli objektum használata kompozíciónak nevezik. Számos alkalommal szeretne objektumot mezőként használni egy másik osztályon belül, mivel könnyű összetett osztályokat létrehozni korábban megírt, jól megtervezett osztályok felhasználásával. Ezt nevezzük összetételnek. Nos, mind az öröklés, mind az összetétel sok esetben egyenértékű funkcionalitást biztosít, az objektum összetétele jobb újrafelhasználási modell, mint az osztály öröklés. Ez a cikk összehasonlítja a két megközelítést.
Az öröklés az egyik leghatékonyabb eszköz a kód újrafelhasználhatóságának az objektum-orientált programozásban történő megvalósításához. Arra a funkcionalitásra utal, amellyel az egyik objektum megszerez egy vagy több másik objektum jellemzőit. Az öröklés a C ++ formában azt jelenti, hogy osztályokat hozhat létre, amelyek attribútumaikat a létező osztályokból származtatja. Ez azt jelenti, hogy egy osztályt egy olyan kapcsolat létrehozására szakosodott, amely az osztályok közötti kapcsolatot hoz létre, amely erős összekapcsolódást eredményez az alap és a származtatott osztályok között. Az öröklés végrehajtása elősegíti a kód újrafelhasználhatóságát, mivel a meglévő osztályokból új osztályokat hoznak létre. Az osztály öröklése megkönnyíti a végrehajtás újrafelhasználásának módosítását. Az osztály-öröklésnek azonban vannak hátrányai is. Először: mivel az öröklést fordítási időben határozzák meg, akkor a szülő osztályoktól örökölt megvalósításokat futási időben nem módosíthatja.
Az OOP egy újabb kapcsolatot hoz létre az összetételnek nevezett osztályok között, amelyet is-has-kapcsolatnak is neveznek. Ha az egyik objektum tulajdonságainak egy másik objektum részének kell lennie, akkor a kapcsolat kompozíciót igényel. Osztály létrehozásához a létező osztályokból minden osztály objektumát be kell jelenteni az új osztály tagjaként. Egyszerű szavakkal, egy objektum egy másik objektumon belüli felhasználása kompozíciónak nevezik. Sokszor érdemes lehet egy objektumot mezőként használni egy másik osztályon belül. Az osztályon belül egy tárgyat használ a kompozícióban. Az osztály-örökléstől eltérően az objektum összetételét futási időben dinamikusan definiálják az objektumok, amelyek hivatkozásokat szereznek más objektumokra. Ezenkívül a kompozíció jobb módszert kínál egy objektum használatához anélkül, hogy veszélyeztetné az objektum belső részleteit, vagyis ott a kompozíció hasznos.
Noha az öröklés és a kompozíció elősegíti a kód újrafelhasználhatóságát az objektum-orientált rendszerben az osztályok közötti kapcsolatok létrehozásával, és sokféle módon biztosítják az azonos funkcionalitást, eltérő megközelítéseket alkalmaznak. Az öröklés révén osztályokat hozhat létre, amelyek attribútumaikat a meglévő osztályokból származtatja, tehát az öröklés felhasználásával osztály létrehozásához kibővítheti egy meglévő osztályt. Éppen ellenkezőleg, egy objektum egy másik objektumon belüli használata kompozíciónak nevezik. Az objektum összetétele az osztály öröklésének alternatívája. Ha az egyik objektum tulajdonságainak egy másik objektum részének kell lennie, akkor a kapcsolat kompozíciót igényel.
Az öröklés során az osztály arra specializálódik, hogy „van-egy” kapcsolatot alakítson ki az osztályok között, ami erős összekapcsolódást eredményez az alap és a származtatott osztályok között. Lehetővé teszi az osztályok hierarchiájának megtervezését, és a hierarchia a leg általánosabb osztálytól kezdődik, és konkrétabb osztályokra lép. Az öröklés megvalósításával az egyik osztály tagfunkciói egy másik osztály tulajdonságaivá válnak anélkül, hogy azokat kifejezetten az osztályon belül kódolnák. Összetételében egy osztályon belüli objektumot használ, és az objektummal kapcsolatos összes kérést továbbítják az objektumhoz. A belső részletek összetételükben nem vannak kitéve egymásnak, tehát „van-egy” kapcsolat van.
Az osztály öröklődését fordítási időben határozzuk meg, így a szülő osztályoktól örökölt megvalósításokat futási időben nem módosíthatjuk. Mivel az öröklés az alosztálynak kiteszi a szülő megvalósításának részleteit, gyakran megszakítja a kapszulázást. A szülőosztályban bekövetkező bármilyen változás az alosztályban tükröződik, ami problémákat okozhat, ha megpróbál egy alosztályt újrafelhasználni. Az objektum összetételét éppen ellenkezőleg, futás közben dinamikusan határozza meg az objektumok révén, más referenciákhoz jutva. Mivel a tárgyakhoz kizárólag az interfészeik révén lehet hozzáférni, az nem fogja megtörni a beágyazást. Bármely objektum futási időben helyettesíthető egy másik objektummal, amennyiben az azonos típusú.
Számos esetben egy objektumot szeretne mezőként használni egy másik osztályon belül, mert az összetett osztályokat könnyebben lehet létrehozni, az előzőekben írt, jól megtervezett osztályokkal. Itt használja a kompozíciót. Az öröklés lehetővé teszi a kód újrafelhasználását az osztály kibővítésével minimális erőfeszítéssel, ezért az öröklés értékes eszköz az osztályok közötti kapcsolatok kialakításában. Általában előnyösebb a kompozíció használata, mivel ez lehetővé teszi egy tárgy használatát anélkül, hogy veszélyeztetné a tárgy belső részleteit, ahol a kompozíció hasznos. Az öröklés nem problémamentes, de az örökséghez hasonlóan az objektum összetétele hasonló teljesítménybeli aggályokat vet fel az objektumok létrehozása és megsemmisítése vonatkozásában..