Dedičnosť vs zloženie
Dedičnosť a zloženie sú dva dôležité koncepty, ktoré sa nachádzajú v OOP (Object Oriented Programming). Zjednodušene povedané, zloženie aj dedičnosť sa zaoberajú poskytovaním dodatočných vlastností alebo správania triede. Dedičnosť je schopnosť triedy zdediť vlastnosti a správanie od nadradenej triedy jej rozšírením. Na druhej strane, Composition je schopnosť triedy obsahovať objekty rôznych tried ako členské dáta.
Čo je dedičnosť?
Ako je uvedené vyššie, dedičnosť je schopnosť triedy zdediť vlastnosti a správanie od nadradenej triedy jej rozšírením. Dedičnosť v podstate poskytuje opätovné použitie kódu tým, že umožňuje rozšírenie vlastností a správania existujúcej triedy o novo definovanú triedu. Ak trieda A rozširuje B, potom trieda B sa nazýva rodičovská trieda (alebo nadtrieda) a trieda A sa nazýva podradená trieda (alebo odvodená trieda/podtrieda). V tomto príklade scenára trieda A zdedí všetky verejné a chránené atribúty a metódy nadtriedy (B). Podtrieda môže voliteľne prepísať (poskytnúť metódam novú alebo rozšírenú funkčnosť) správanie zdedené z nadradenej triedy.
Dedičnosť predstavuje vzťah „je-a“v OOP. To v podstate znamená, že A je tiež B. Inými slovami, B môže byť trieda so všeobecným popisom určitej entity reálneho sveta, ale A špecifikuje určitú špecializáciu. V reálnom svete problém s programovaním by sa trieda Osoba mohla rozšíriť na vytvorenie triedy Zamestnanec. Toto sa nazýva špecializácia. Môžete však tiež najprv vytvoriť triedu Zamestnanec a potom ju zovšeobecniť aj na triedu Osoba (t.j.e. zovšeobecnenie). V tomto príklade bude mať zamestnanec všetky vlastnosti a správanie osoby (t. j. zamestnanec je tiež osoba) a môže obsahovať aj niektoré ďalšie funkcie (takže osoba nie je zamestnancom).
Čo je zloženie?
Zloženie je schopnosť triedy obsahovať objekty rôznych tried ako členské dáta. Napríklad trieda A môže obsahovať objekt triedy B ako člen. Tu môžu byť všetky verejné metódy (alebo funkcie) definované v B vykonávané v rámci triedy A. Trieda A sa stáva kontajnerom, zatiaľ čo trieda B sa stáva obsiahnutou triedou. Zloženie sa tiež označuje ako kontajner. V tomto príklade možno povedať, že trieda A je zložená z triedy B. V OOP Composition predstavuje vzťah „má-a“. Je dôležité poznamenať, že aj keď má kontajner prístup na vykonanie všetkých verejných metód obsiahnutej triedy, nie je schopný zmeniť alebo poskytnúť ďalšie funkcie. Pokiaľ ide o problém programovania v reálnom svete, objekt triedy TextBox môže byť obsiahnutý v triede Form, a teda možno povedať, že Formulár obsahuje TextBox (alebo alternatívne, Formulár pozostáva z TextBoxu).
Aký je rozdiel medzi dedičnosťou a skladbou?
Hoci dedičnosť a kompozícia sú dva koncepty OOP, sú úplne odlišné v tom, čo umožňujú programátorovi dosiahnuť. Dedičnosť je schopnosť triedy dediť vlastnosti a správanie od nadradenej triedy jej rozšírením, zatiaľ čo kompozícia je schopnosť triedy obsahovať objekty rôznych tried ako členské údaje. Ak je trieda rozšírená, zdedí všetky verejné a chránené vlastnosti/správanie a toto správanie môže byť prepísané podtriedou. Ak je však trieda obsiahnutá v inej, kontajner nezíska možnosť zmeniť alebo pridať správanie k obsiahnutej triede. Dedičnosť predstavuje vzťah „je-a“v OOP, zatiaľ čo zloženie predstavuje vzťah „má-a“.