Dědičnost vs složení
Dědičnost a kompozice jsou dva důležité pojmy, které se nacházejí v OOP (Object Oriented Programming). Jednoduše řečeno, Composition i Inheritance 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í z nadřazené třídy jejím rozšířením. Na druhou stranu, složení 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í z nadřazené třídy jejím rozšířením. Dědičnost v podstatě poskytuje 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řazenou třídou (nebo super třídou) a třída A se nazývá podřízená třída (nebo odvozená třída / podtřída). V tomto příkladu scénář zdědí třída A všechny veřejné a chráněné atributy a metody super tří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ě problém s programováním by mohla být třída Person rozšířena tak, aby vytvořila třídu Employee. Tomu se říká specializace. Ale můžete také nejprve vytvořit třídu Employee a poté ji zobecnit také na třídu Person (tj. 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 (Osoba tedy není Zaměstnanec).
Co je to složení?
Složení 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 člena. Zde lze všechny veřejné metody (nebo funkce) definované v B provést v rámci třídy A. Třída A se stane kontejnerem, zatímco třída B se stane obsaženou třídou. Složení se také označuje jako Containership. V tomto příkladu lze říci, že třída A se skládá ze třídy B. V OOP představuje Composition vztah „má-a“. Je důležité si uvědomit, že i když má kontejner přístup k provádění všech veřejných metod obsažené třídy, není schopen měnit nebo poskytovat další funkce. Pokud jde o problém s programováním v reálném světě, objekt třídy TextBox může být obsažen ve třídě Form,a tedy lze říci, že formulář obsahuje TextBox (nebo alternativně je formulář složen z TextBoxu).
Jaký je rozdíl mezi dědičností a složením?
Ačkoli jsou Dědičnost a Složení dva koncepty OOP, liší se v tom, v čem umožňují programátorovi dosáhnout. Dědičnost je schopnost třídy zdědit vlastnosti a chování z nadřazené třídy jejím rozšířením, zatímco Composition je schopnost třídy obsahovat objekty různých tříd jako členská data. Pokud je třída rozšířena, dědí všechny veřejné a chráněné vlastnosti / chování a tato chování mohou být přepsána podtřídou. Pokud je ale třída obsažena v jiné, kontejner nezíská schopnost měnit nebo přidávat chování k obsaženému. Dědičnost představuje v OOP vztah „je-a“, zatímco Složení představuje vztah „má-a“.