Dědění -je to jeden ze základních principů objektově orientovaného programování (OOP), který umožňuje vytváření nových tříd na základě již existujících.
V objektově orientovaném programování existuje koncept třídy popisující soubor vlastností a metod objektu. Dědičnost umožňuje vytvářet dědické třídy, které dědí vlastnosti a metody z nadřazené třídy. To znamená, že dědická třída má všechny vlastnosti a metody rodičovské třídy a může mít také své vlastní.
Dědičnost umožňuje vytvořit hierarchii tříd, kde je každá dědická třída specializovanější verzí rodičovské třídy. To zjednodušuje strukturu programu a umožňuje vám znovu použít kód, čímž se vyhnete duplicitě.
Aplikace dědičnosti umožňuje vytvářet flexibilní a rozšiřitelnou architekturu programu. Dědičné třídy mohou přidávat nové vlastnosti a předefinovat metody nadřazené třídy a mohou také sdílet společnou logiku s jinými třídami prostřednictvím dědičnosti. To umožňuje vytváření modulárních a znovu použitých komponent programu.
Dědičnost - základní princip OOP
Dědičnost umožňuje vytvářet abstraktnější a univerzálnější třídy, které lze rozšířit a změnit v odvozených třídách. Rodičovská třída, ze které dědičnost pochází, se nazývá super třída nebo základní třída. Třída, která dědí vlastnosti a metody ze super třídy, se nazývá podtřída nebo derivace třídy.
Jedním z hlavních cílů dědičnosti je opětovné použití kódu. Pokud je potřeba vytvořit třídu, která bude mít podobné vlastnosti a metody s již existující třídou, pak lze dědičnost použít k vytvoření dědice, který přidá nebo změní některé vlastnosti a metody.
| Superclass | Podtřída |
|---|---|
| Auto | Kamion |
| Obrazec | Kruh |
| Pták | Orel |
V uvedených příkladech mají superlasery (Auto, postava, pták) společné vlastnosti a metody, které mohou být použity deriváty tříd (kamion, kruh, Orel). V tomto případě mohou podtřídy doplnit nebo předefinovat metody supertřídy podle jejich specifických požadavků nebo logiky.
Dědičnost také umožňuje vytvořit hierarchii tříd,kde každá následná třída je rozšířením předchozí. Je například možné vytvořit hierarchii tříd pro reprezentaci různých druhů zvířat, kde každá další třída přidává další vlastnosti a metody. To usnadňuje organizaci a pochopení kódu a také usnadňuje provádění změn v budoucnu.
Hierarchie tříd a objektů
Hierarchie tříd je uspořádání tříd jako strom, kde každá třída zdědí vlastnosti a metody z nadřazené třídy a může mít podřízené třídy. To umožňuje vytvářet specializovanější třídy, které dědí obecné vlastnosti z rodičovských tříd a doplňují je svými jedinečnými vlastnostmi a metodami.
Hierarchie objektů v objektově orientovaném programování je vztah mezi objekty, kde mohou být objekty instancemi tříd a dědit jejich vlastnosti a metody. Každý objekt může mít své vlastní jedinečné hodnoty vlastností a vyvolat metody zděděné ze třídy k provedení určitých kroků.
Hierarchie tříd a objektů usnadňuje organizaci kódu, opětovné použití a usnadňuje jeho pochopení. Umožňuje vytvářet abstraktnější třídy, které definují obecné charakteristiky, a konkrétnější třídy, které zdědí tyto vlastnosti a přidají své vlastní.
Třídy-předkové a třídy-potomci
V objektově orientovaném programování mohou být třídy uspořádány do hierarchie,kde jedna třída může být dědicem druhé. Předkové třídy jsou základní třídy, které obsahují obecné vlastnosti a metody. Třídy-potomci zdědí tyto vlastnosti a metody a mohou přidat své vlastní.
Předková třída je abstraktnější a obecnější pojem, zatímco potomková třída se specializuje na konkrétní úkol nebo má další vlastnosti a metody. Dědičnost umožňuje používat kód třídy-předek ve třídě-potomek, což podporuje opětovné použití kódu a usnadňuje jeho podporu.
Potomková třída může měnit a doplňovat vlastnosti a metody předkovy třídy a přidávat vlastní. Tato flexibilita umožňuje vytvářet specializovanější třídy zděděné ze společných základních tříd.
Třídy-potomci zdědí nejen vlastnosti a metody předkovy třídy, ale také její konstruktory, což umožňuje inicializaci objektů třídy-potomků. Potomkové třídy mohou také přepsat metody předkovy třídy změnou jejich implementace nebo přidáním další funkce.
Dědičnost v objektově orientovaném programování umožňuje vytvářet hierarchie tříd, které odrážejí strukturu a vztahy mezi různými objekty v programu. Pomáhá organizovat kód tím, že je přehlednější, flexibilnější a snadno rozšiřitelný.
Předefinování a rozšíření funkčnosti
Předefinování funkcí umožňuje změnit implementaci metod, které jsou již definovány v nadřazené třídě. Podřízená třída může předefinovat jednu nebo více metod rodičovské třídy tím, že poskytne svou vlastní implementaci. V důsledku toho se chování objektů podřízené třídy může lišit od chování objektů nadřazené třídy. To je zvláště užitečné, když je nutné přizpůsobit funkčnost rodičovské třídy specifickým potřebám podřízené třídy.
Rozšíření funkčnosti umožňuje přidat novou funkcionalitu do podřízené třídy prostřednictvím definování nových metod. Podřízená třída může obsahovat jak předefinované metody rodičovské třídy, tak své vlastní metody, čímž rozšiřuje základní sadu funkcí dostupných objektům nadřazené třídy. Rozšíření funkčnosti umožňuje vytvářet specializovanější třídy, které mohou provádět určité úkoly efektivněji a pohodlněji.
Výhody využití dědictví
| Snížení duplicity kódu. |
| Možnost vytvoření obecné základní třídy, která obsahuje obecnou funkčnost, a dědičnost jejích vlastností a metod do podřízených tříd. Tím se zabrání duplikaci kódu a zjednoduší se jeho podpora a úprava. |
| Rozšiřitelnost a flexibilita. |
| Pomocí dědičnosti lze snadno přidat nové třídy dědičné od těch stávajících a provádět v nich změny. To umožňuje rozšíření programu a umožňuje přizpůsobit jej měnícím se požadavkům. |
| Polymorfismus. |
| Díky dědičnosti mohou být objekty podřízených tříd použity místo objektů základní třídy. To umožňuje zjednodušit kód a zvýšit flexibilitu práce s různými typy objektů. |
| Úroveň abstrakce. |
| Dědičnost umožňuje vytvořit hierarchii tříd s různými úrovněmi abstrakce. Základní třída může představovat abstraktní entitu, zatímco dceřiné třídy mohou představovat konkrétnější implementace. To podporuje jasnější a strukturovanější prezentaci programu. |
Obecně platí, že použití dědičnosti umožňuje vytvářet flexibilnější, rozšiřitelné a podporované programy. Je důležitým nástrojem při navrhování a realizaci komplexních systémů.
Dědičnost a polymorfismus
Dědičnost umožňuje jedné třídě dědit vlastnosti a metody jiné třídy. Třída, která dědí, se nazývá podtřída nebo odvozená třída A třída, která předává své vlastnosti a metody, se nazývá super třída nebo základní třída. Podtřída může používat vlastnosti a metody super třídy a také přidávat nové.
Polymorfismus umožňuje jedné metodě mít různé implementace v různých třídách. To umožňuje programátorovi použít stejnou metodu pro různé typy objektů, aniž by musel znát konkrétní typ objektu. Tento přístup zjednodušuje kód a činí jej flexibilnějším.
Dědičnost a polymorfismus spolu úzce souvisí. Polymorfismus se často používá spolu s dědičností k vytvoření různých implementací metod v podtřídách supertřídy. To vám umožňuje používat sdílené rozhraní pro práci s různými typy objektů.
| Dědění | Polymorfismus |
|---|---|
| Jedna třída dědí vlastnosti a metody jiné třídy. | Jedna metoda má různé implementace v různých třídách. |
| Vytváří hierarchii tříd. | Usnadňuje práci s různými typy objektů. |
| Umožňuje opětovné použití kódu. | Díky tomu je Kód flexibilnější a uživatelsky přívětivější. |
Dědičnost a polymorfismus jsou základní pojmy v objektově orientovaném programování a umožňují efektivnější a škálovatelnější kód.
Příklady dědičnosti v populárních programovacích jazycích
Příklady dědičnosti lze nalézt v mnoha populárních programovacích jazycích, jako jsou:
1. Java: V Javě je dědičnost implementována pomocí klíčového slova extends . Například třída Person může být základem pro třídu Student, která zdědí vlastnosti a metody třídy Person a přidá vlastní.
2. Python: V Pythonu se dědičnost provádí také pomocí klíčového slova class . Pokud máme například třídu Animal s metodou move (), můžeme vytvořit třídu Dog, která zdědí metodu move() a k štěkání přidá vlastní metodu bark ().
3. C++: V C++ je dědičnost implementována pomocí klíčových slov class a public . Například třída Shape může být základní třídou pro třídy Circle a Rectangle , které zdědí jeho vlastnosti a metody a přidají své vlastní.
4. JavaScript: V JavaScriptu se dědičnost provádí pomocí prototypů. Například objekt Animal může mít prototyp Mammal, který zdědí techniky a vlastnosti Animal a přidá vlastní.
To je jen několik příkladů dědičnosti v populárních programovacích jazycích. Všechny demonstrují princip dědičnosti, který umožňuje vytvářet flexibilnější a modulárnější programy.