Dědičnost vs Složení
Dědičnost a složení jsou dva důležité pojmy nalezené v OOP (Object Oriented Programming). Zjednodušeně řečeno, jak Složení, 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 druhé straně, Složení je schopnost třídy obsahovat objekty různých tříd jako data členů.
Co je dědičnost?
Jak je 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ě poskytuje opakované 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 nadřazená třída) a třída A se nazývá podřízená třída (nebo odvozená třída / podtřída). V tomto příkladu scénář třída A zdědí všechny veřejné a chráněné atributy a metody nadřazené třídy (B). Podtřída může volitelně potlačit (poskytnout nové nebo rozšířené funkce metodám) chování zděděné z nadřazené třídy.
Dědičnost představuje v OOP vztah „is-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 skutečného světa, ale A specifikuje určitou specializaci. Při programování v reálném světě může být třída Person rozšířena o třídu Employee. Tomu se říká specializace. Mohli byste ale také nejprve vytvořit třídu Zaměstnanci a poté ji zobecnit také do třídy Osob (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 také obsahovat některé další funkce (takže osoba není zaměstnancem)..
Co je složení?
Složení je schopnost třídy obsahovat objekty různých tříd jako data členů. 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ést ve třídě A. Třída A se stává kontejnerem, zatímco třída B se stává obsaženou třídou. Složení je také označováno jako kontejnery. V tomto příkladu lze říci, že třída A se skládá ze třídy B. V OOP představuje složení „vztah has-a“. Je důležité poznamenat, že ačkoli kontejner má přístup k provádění všech veřejných metod obsažené třídy, není schopen změnit nebo poskytnout další funkce. Pokud jde o problém s programováním ve skutečném světě, objekt třídy TextBox může být obsažen ve třídě Form, a tak 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 dědičnost a složení jsou dva koncepty OOP, jsou v tom, co umožňují programátorům, docela odlišné. 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 Složení 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í může být podtřídou potlačena. Ale pokud je třída obsažena v jiné, kontejner nedostane schopnost změnit nebo přidat chování k obsažené. Dědičnost představuje v OOP vztah „is-a“, zatímco složení představuje vztah „has-a“.