Úvodní stránka | Tato stránka v originále

Dědičnost (objektově orientované programování)

Vidět dědičnost (informatika)' ' pro jiná počítačová použití dědičnosti.

V objektově orientovaném programování informatiky, dědičnost je způsob, jak se tvořit nový classeses nebo objectss používání pre-definované objekty nebo třídy kde nové jednoduše převezmou staré implemetions a characterstics. To je zamýšlel pomáhat opětovnému použití existujícího kódu s malý nebo žádná modifikace.

Dědičnosti komplexu mohou způsobit Yo-problém yo.

Aplikace dědičnosti

Specializace

Jeden obyčejný důvod k dědičnosti použití má vytvořit specializace existujících tříd nebo objekty. Toto je často nazvané
subtyping když platil o třídách. Ve specializaci, nové třídě nebo objektu má data nebo aspekty chování, které nejsou díl zděděné třídy. Například, “bankovní účtová” třída by mohla mít údaje pro “číslo účtu”, “vlastníka” a “rovnováhu”. An “zaujme účet postoje” třída by mohla zdědit “bankovní účet” a pak přidat data pro “úrokovou míru” a “úrok přirůstal” spolu s chováním pro vypočítání úroku vydělal.

Další forma specializace nastane, když zděděná třída udá, že to má zvláštní chování ale dělá ne vlastně realizovat chování. Každá třída, která zdědí od toho abstraktní třída musí poskytovat realizaci toho chování. Toto poskytovat skutečného chování subclass je někdy známý jako implementace nebo reification.

Mnoho jazyků objektově orientovaného programování dovolí třídu nebo objekt nahradit realizaci aspektu a mdash; typicky chování a mdash; že to zdědilo. Tento proces je obvykle nazvaný přesmyknutí. Přesmyknutí představí komplikaci: která verze chování kód od zděděné třídy vidí a mdash; jeden to je část jeho vlastní třídy nebo prvořadé chování? Odpověď rozlišuje mezi programovacími jazyky a některé jazyky poskytují schopnost ukázat, že zvláštní chování nemá být overridden.

Rozšíření

Další důvod k dědičnosti použití má poskytovat další data nebo rysy chování. Tato praxe je někdy nazývána rozšířením. V srovnání s případem specializace, s rozšířením nové údaje nebo chování mohli byli poskytováni ve zděděné třídě protože oni jsou obecně použitelní pro všechny příklady třídy.

Rozšíření je často používáno, když začlenění nových vlastností do zděděné třídy je jeden nemožný nebo ne vhodný. To může také být používáno na objektové úrovni, takový jak v Vzoru malíře pokojů.

Kód re-použití

Jeden z nejčasnějších motivations pro dědičnost používání měl dovolit novou třídu k re-použít kód který už existoval v další třídě. Tato praxe je obvykle nazývána dědičností implementace.

Ve většině ubikacích, dědičnost třídy pro výhradní účel kódu re-použití vypadávalo laskavosti. Hlavní zájem je že dědičnost implementace neposkytuje nějaké ujištění o polymorphic substitutability a mdash; příklad re-třída používání nemůže nutně být substituted na příklad zděděné třídy. Alternativní technika, delegace, vyžaduje více programovací snahu ale vyhýbá se substitutability záležitosti.

Ponětí, že dědičnost realizace by měla být odmítána je ne univerzálie. Jedno prominentní objektově orientované programování expert, který věří, že dědičnost implementace má jeho místo je Bertrand Meyer. V jeho knize Objekt určoval stavbu softwaru, 2nd ed., Meyer vypíše dvanáct různých použití dědičnosti, kterou on zvažuje být legitimní, většina ze kterého zahrnovat nějaké množství dědičnosti implementace.

An příklad dědičnosti

Jávský program by mohl mít úroveň Zvíře to obsahovalo elementy takových dat jak zda zvíře bylo presently živé, kde to je současně lokalizováno, etc.; stejně jako metody instruovat zvíře, aby jedl, pohyb, kamarád, etc. Jestliže my jsme chtěli vytvořit třídu Savec, většina z těch datových prvků a funkce by byli stejní jak pro většinu zvířat, ale nemnoho by se měnil. My proto vymezíme Savec jako subclass Zvíře (my pak říkáme to Zvíře je Savec' s superclass nebo rodič řadí):

 prvotřídní savec rozšíří zvíře {vlasy m _ h; hrudi m _ b; savec množit () {potomstva savce;

super.reproduce (); jestliže (self.is_female ()) {potomstva = super.give_birth (); offspring.breastfeed (m _ b);} péče _ pro _ mladý (potomstva); potomstva návratu;}}

Poznámka tady že my nepotřebujeme udat, že savec má všechny obvyklé zvířecí věci: umístění, schopnost jíst, pohyb, etc. My přece přidáváme některé další rysy takový jako vlasy a hrudi, které jsou charakteristické pro savce, a my obnovujeme množit metoda přidat funkčnost. Uvnitř množit metoda, si všimnout hovoru super.reproduce (). Toto je telefon do metody superclass, kterou my obnovujeme. Toto ostře znamená “dělat kterákoliv člen mého superclass by dělal”, který je pak následovaný kódem typickým pro náš nový subclass.

Viďte Rozmanitou dědičnost.

Viz též: