Dědičnost vs. Containership
Dědičnost a Containership jsou dva důležité koncepty nalezené v OOP (Object Oriented Programming Example: C++). Jednoduše řečeno, jak Containership, tak dědičnost se zabývají poskytováním dalších vlastností nebo chování třídě. Dědičnost je schopnost třídy zdědit vlastnosti a chování od nadřazené třídy jejím rozšířením. Na druhou stranu, Containership je schopnost třídy obsahovat objekty různých tříd jako členská data.
Co je dědičnost?
Jak bylo uvedeno výše, dědičnost je schopnost třídy zdědit vlastnosti a chování od nadřazené třídy jejím rozšířením. Dědičnost v podstatě zajišťuje opětovné použití kódu tím, že umožňuje rozšíření vlastností a chování existující třídy o nově definovanou třídu. Pokud třída A rozšiřuje B, pak se třída B nazývá nadřazená třída (nebo nadtřída) a třída A se nazývá podřízená třída (nebo odvozená třída/podtřída). V tomto příkladu scénáře třída A zdědí všechny veřejné a chráněné atributy a metody nadtřídy (B). Podtřída může volitelně přepsat (poskytnout metodám novou nebo rozšířenou funkčnost) chování zděděné od nadřazené třídy. Dědičnost představuje v OOP vztah „je-a“. To v podstatě znamená, že A je také B. Jinými slovy, B může být třída s obecným popisem určité entity reálného světa, ale A specifikuje určitou specializaci. V reálném světě programátorského problému by třída Person mohla být rozšířena a vytvořit třídu Employee. Tomu se říká specializace. Ale můžete také nejprve vytvořit třídu Zaměstnanec a poté ji zobecnit také na třídu Osoba (tj. E. zobecnění). V tomto příkladu bude mít Zaměstnanec všechny vlastnosti a chování Osoby (tj. Zaměstnanec je také Osoba) a může obsahovat také některé další funkce (takže Osoba není Zaměstnanec).
Co je Containership?
Containership je schopnost třídy obsahovat objekty různých tříd jako členská data. Například třída A může obsahovat objekt třídy B jako člen. Zde lze všechny veřejné metody (nebo funkce) definované v B provádět v rámci třídy A. Třída A se stává kontejnerem, zatímco třída B se stává obsaženou třídou. Containership je také označován jako Composition. V tomto příkladu lze říci, že třída A se skládá z třídy B. V OOP představuje Containership vztah „má-a“. Je důležité poznamenat, že i když má kontejner přístup ke spuštění všech veřejných metod obsažené třídy, není schopen je měnit ani poskytovat další funkce. Pokud jde o problém programování v reálném světě, objekt třídy TextBox může být obsažen ve třídě Form, a lze tedy říci, že Formulář obsahuje TextBox (nebo alternativně, Formulář se skládá z TextBoxu).
Rozdíl mezi dědičností a Containership
Přestože dědičnost a kontejner jsou dva koncepty OOP, jsou zcela odlišné v tom, co umožňují programátorovi dosáhnout. Dědičnost je schopnost třídy zdědit vlastnosti a chování od nadřazené třídy jejím rozšířením, zatímco Containership je schopnost třídy obsahovat objekty různých tříd jako členská data. Pokud je třída rozšířena, zdědí všechny veřejné a chráněné vlastnosti/chování a tato chování mohou být přepsána podtřídou. Ale pokud je třída obsažena v jiné, kontejner nezíská možnost změnit nebo přidat chování obsažené. Dědičnost představuje vztah „je-a“v OOP, zatímco Containership představuje vztah „má-a“.