Porovnávacia tabuľka
Základ pre porovnanie | dedičstvo | polymorfizmus |
---|---|---|
základné | Dedičstvo vytvára novú triedu s využitím vlastností už existujúcej triedy. | Polymorfizmus je v podstate spoločným rozhraním pre viacnásobnú formu. |
uskutočnenie | Dedičstvo je v zásade implementované na triedach. | Polymorfizmus je v zásade implementovaný na funkciu / metódy. |
použitie | Podporovať koncepciu opakovanej použiteľnosti v OOP a znižuje dĺžku kódu. | Umožňuje objekt rozhodnúť, akú formu funkcie sa má spúšťať pri kompilácii času (preťaženie) a času spustenia (overriding). |
formuláre | Dedičnosť môže byť jediné dedičstvo, viacnásobné dedičstvo, viacúrovňové dedičstvo, hierarchické dedičstvo a hybridné dedičstvo. | Polymorfizmus môže byť kompilovaný časový polymorfizmus (preťaženie) alebo polymorfizmus behu (prepúšťanie). |
príklad | Trieda "tabuľka" môže zdediť prvok triedy "nábytok", pretože "stôl" je "nábytok". | Trieda 'study_table' môže mať aj funkciu 'set_color ()' a trieda 'Dining_table' môže tiež mať funkciu 'set_color ()', takže akú formu funkcie set_color () čas spustenia. |
Definícia dedičstva:
Dedičstvo je jedným z kľúčových prvkov OOP, ktorý výrazne podporuje "opakovanú využiteľnosť". Opätovná využiteľnosť by sa dala opísať ako vytvorenie novej triedy opätovným použitím vlastností existujúcej triedy. V dedičstve existuje základná trieda, ktorú zdedí odvodená trieda. Keď trieda zdedí inú triedu, člen (y) základnej triedy sa stáva členom (členmi) odvodenej triedy.
Všeobecná forma dedenia triedy je nasledovná:
class derived-class-name: prístupový špecifikátor base-class-name {// body triedy};
Tu špecifikátor prístupu poskytuje spôsob prístupu (súkromné, verejné, chránené) členom (členom) v základnej triede k odvodenej triede. Ak nie je k dispozícii špecifikátor prístupu, je predvolene považovaný za "súkromný". V C ++, ak je odvodená trieda "struct", špecifikátor prístupu je predvolene "verejný".
V dedičstve C ++ je možné dosiahnuť dedičnosť v piatich formách. Môžu byť klasifikované ako:
- Jediné dedičstvo (iba jedna super-trieda)
- Viacnásobná dedičnosť (niekoľko superclasses)
- Hierarchické dedičstvo (jedna super trieda, veľa podtried)
- Viacnásobné dedičstvo (odvodené z odvodenej triedy)
V jazyku Java trieda zdedí druhú triedu pomocou kľúčového slova "extends". V základnej triede je Java označovaná ako superkategória a odvodená trieda sa označuje ako podtrieda. Podtrieda nemôže pristupovať k členom základnej triedy, ktoré sú deklarované ako "súkromné". Všeobecná forma zdedenia triedy v jazyku Java je nasledujúca.
trieda odvodená od triedy-name rozširuje názov základnej triedy {// body triedy};
Java nepodporuje dedičnosť viacnásobného dedičstva, zatiaľ čo podporuje viacúrovňovú hierarchiu. V jazyku Java, niekedy superkategória môže chcieť skryť podrobnosti implementácie a niektoré časti týchto údajov sú "súkromné". Rovnako ako v jazyku Java, podtrieda nemôže pristupovať k súkromným členom nadradenej triedy a ak podtrieda chce pristupovať alebo inicializovať týchto členov, potom Java poskytuje riešenie. Podtrieda môže odkázať členov svojej bezprostrednej superclass pomocou kľúčového slova "super". Pamätajte, že máte prístup len k členom bezprostrednej nadtriedy.
"Super" má dve všeobecné formy. Prvým je, že sa nazývajú konštruktér super triedy. Druhým je prístup k členovi nadtriedy, ktorá bola skrytá členom podtriedy.
// prvá forma volania konštruktora. class supper_class {supper_class (argument_list) {..} // konštruktér super triedy}; class sub_class rozširuje supper_class {sub_class (argument_list) {..} // konštruktor sub_class super (argument_list); // sub_class volá konštruktéra super triedy}};
// sekunda pre "super" trieda supper_class {int i; } class sub_class rozširuje supper_class {int i; sub_class (int a, int b) {super.i = a; // 'i' super triedy i = b; // 'i' podkategórie}};
Definícia polymorfizmu
Termín polymorfizmus jednoducho znamená "jednu funkciu, viaceré formy". Polymorfizmus sa dosahuje tak v čase kompilácie, ako aj v čase prevádzky. Polymorfizmus kompilácie času sa dosahuje prostredníctvom "preťaženia", zatiaľ čo polymorfizmus časového priebehu sa dosahuje prostredníctvom "prevratu".
Polymorfizmus umožňuje objektu rozhodnúť sa "akú formu funkcie sa má vyvolávať, keď" v oboch, kompilovať čas a čas spustenia.
Prediskutujeme prvý koncept preťaženia. Pri preťažení definujeme funkciu v triede viac ako jeden čas s iným typom údajov a počtom parametrov, zatiaľ čo funkcia, ktorá má byť preťažená, musí mať rovnaký typ návratu. Väčšinou sú funkcie preťaženia konštruktérmi triedy.
preťaženie triedy {int a, b; public: int preťaženie (int x) {// prvé preťaženie () konštruktor a = x; vrátiť a; } int preťaženie (int x, int y) {// druhé preťaženie () konštruktor a = x; b = y; vrátiť a * b; }}; int main () {preťaženie O1; O1.overload (20); // prvé preťaženie () konštruktér volanie O1.overload (20, 40); // druhá preťaženie () volanie konštruktéra}
Teraz poďme diskutovať o druhej forme polymorfizmu, tj nadradenej. Pojem "overriding" môže byť implementovaný len na funkciu tried, ktoré tiež implementujú koncept dedičstva. V C ++ sa pred funkciou, ktorej sa má prepísať, predchádza kľúčové slovo "virtuálny" v základnej triede a predefinované v odvodenej triede s rovnakým prototypom okrem kľúčového slova "virtual".
class public {public: virtual void funct () {// virtuálna funkcia základnej triedy cout << "Toto je funkcia základnej triedy ()"; }}; trieda odvodená1: verejná základňa {public: void funct () {// virtuálna funkcia základnej triedy predefinovaná v odvodenej triede coutKľúčové rozdiely medzi dedičstvom a polymorfizmom
- Dedičstvo vytvára triedu, ktorá odvodzuje svoju vlastnosť z už existujúcej triedy. Na druhej strane, polymorfizmus je rozhranie, ktoré možno definovať vo viacerých formách.
- Dedičstvo sa implementuje na triedy, zatiaľ čo polymorfizmus sa realizuje na metódach / funkciách.
- Keďže dedičstvo umožňuje odvodenej triede používať prvky a metódy definované v základnej triede, odvodená trieda nemusí definovať tieto prvky alebo metódu znova, takže môžeme povedať, že zvyšuje opakovateľnosť kódu a tým znižuje dĺžku kódu, Na druhej strane, polymorfizmus umožňuje, aby sa objekt rozhodol, akú formu metódy sa chce odvolávať v čase kompilácie, ako aj v čase behu.
- Dedičstvo možno klasifikovať ako jedno dedičstvo, viacnásobné dedičstvo, viacúrovňové dedičstvo, hierarchické dedičstvo a hybridné dedičstvo. Na druhej strane je polymorfizmus klasifikovaný ako preťaženie a prevrat.
záver:
Dedičstvo a polymorfizmus sú vzájomne prepojené koncepty, keďže dynamický polymorfizmus sa vzťahuje na triedy, ktoré tiež implementujú koncepciu dedičnosti.