Dedičstvo vs. kontajnerová doprava
Dedičnosť a kontajner sú dva dôležité koncepty nachádzajúce sa v OOP (Object Oriented Programming Example: C++). Zjednodušene povedané, ako kontajner, tak 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, Containership 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 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 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 kontajnerová preprava?
Kontajnerovosť 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. Kontajnerovanie sa tiež označuje ako zloženie. V tomto príklade možno povedať, že trieda A sa skladá z triedy B. V OOP predstavuje kontajnerová preprava 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).
Rozdiel medzi dedičstvom a kontajnerovým právom
Hoci dedičnosť a kontajner sú dva koncepty OOP, úplne sa líšia v tom, čo umožňujú programátorovi dosiahnuť. Dedičnosť je schopnosť triedy zdediť vlastnosti a správanie od nadradenej triedy jej rozšírením, zatiaľ čo kontajnerová schopnosť 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 Kontajnerstvo predstavuje vzťah „má-a“.