Dedičstvo vs zloženie
Dedičstvo a zloženie sú dva dôležité pojmy, ktoré sa nachádzajú v OOP (Object Oriented Programming). Zjednodušene povedané, zloženie aj dedičstvo sa zaoberajú poskytovaním ďalších vlastností alebo správania triedy. Dedenie je schopnosť triedy dediť vlastnosti a správanie od rodičovskej triedy jej rozšírením. Na druhej strane, zloženie je schopnosť triedy obsahovať ako dáta člena objekty rôznych tried.
Čo je to dedičstvo?
Ako už bolo spomenuté vyššie, dedenie je schopnosť triedy dediť vlastnosti a správanie od rodičovskej triedy jej rozšírením. Dedičstvo v podstate poskytuje opätovné použitie kódu umožnením rozšírenia vlastností a správania existujúcej triedy o novo definovanú triedu. Ak trieda A rozširuje B, potom sa trieda B nazýva rodičovská trieda (alebo super trieda) a trieda A sa nazýva detská 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 super triedy (B). Podtrieda môže voliteľne prepísať (poskytnúť metódu novú alebo rozšírenú funkčnosť) správanie zdedené z nadradenej triedy.
Dedenie predstavuje v OOP vzťah „je-a“. 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 v reálnom svete, ale A špecifikuje určitú špecializáciu. V probléme s programovaním v reálnom svete by sa trieda Person mohla rozšíriť, aby sa vytvorila trieda Employee. Tomu sa hovorí špecializácia. Môžete ale tiež najskôr vytvoriť triedu Employee a potom ju zovšeobecniť aj na triedu Person (tj. Zovšeobecnenie). V tomto príklade bude mať zamestnanec všetky vlastnosti a správanie osoby (tj. Zamestnanec je tiež osobou) 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 údaje členov. Napríklad trieda A môže obsahovať ako objekt objekt triedy B. Tu je možné vykonať všetky verejné metódy (alebo funkcie) definované v B v rámci triedy A. Trieda A sa stane kontajnerom, zatiaľ čo trieda B sa stane obsiahnutou triedou. Zloženie sa tiež označuje ako kontajnerovanie. V tomto príklade možno povedať, že trieda A sa skladá z triedy B. V OOP predstavuje kompozícia vzťah „má-a“. Je dôležité poznamenať, že aj keď má kontajner prístup na vykonávanie všetkých verejných metód obsiahnutej triedy, nie je schopný meniť alebo poskytovať ďalšie funkcie. Pokiaľ ide o problém s programovaním v reálnom svete, objekt triedy TextBox môže byť obsiahnutý v triede Form,a teda sa dá povedať, že formulár obsahuje TextBox (alebo alternatívne je formulár zložený z TextBoxu).
Aký je rozdiel medzi dedičstvom a zložením?
Aj keď sú dedičnosť a zloženie dva koncepty OOP, líšia sa v tom, v čom umožňujú programátorovi dosiahnuť. Dedičnosť je schopnosť triedy dediť vlastnosti a správanie od rodičovskej triedy jej rozšírením, zatiaľ čo zloženie je schopnosť triedy obsahovať ako členské údaje objekty rôznych tried. Ak je trieda rozšírená, zdedí všetky verejné a chránené vlastnosti / správanie a toto správanie môže byť podtriedou prepísané. Ale ak je trieda obsiahnutá v inej, kontajner nedostane schopnosť meniť alebo pridávať správanie k obsiahnutej. Dedičnosť predstavuje v OOP vzťah „je-a“, zatiaľ čo zloženie predstavuje vzťah „má-a“.