Priporočena, 2024

Izbira Urednika

Razlika med dedovanjem in polimorfizmom

Dedovanje omogoča, ponovno uporabnost kode in polimorfizem je, pojavljanje ene funkcije z drugačno obliko. Osnovna razlika med dedovanjem in polimorfizmom je v tem, da dedovanje omogoča, da se že obstoječa koda ponovno uporabi v programu, polimorfizem pa zagotavlja mehanizem za dinamično odločitev, katera oblika funkcije, ki jo je treba poklicati.

Primerjalna tabela

Podlaga za primerjavoDedovanjePolimorfizem
OsnovnoDedovanje ustvarja nov razred z lastnostmi že obstoječega razreda.Polimorfizem je v bistvu skupni vmesnik za več oblik.
IzvajanjeDedovanje se v bistvu izvaja na razredih.Polimorfizem se v osnovi izvaja na funkciji / metodah.
UporabaPodpreti koncept ponovne uporabnosti v OOP in zmanjšati dolžino kode.Omogoča predmetu, da se odloči, katera oblika funkcije, ki naj se pokliče, ko se prevede (preobremenitev), kot tudi čas izvajanja (preglasitev).
ObrazciDedovanje je lahko ena sama dediščina, večkratna dediščina, dedovanje na več ravneh, hierarhično dedovanje in hibridno dedovanje.Polimorfizem je lahko polimorfizem časa prevajanja (preobremenitev) ali polimorfizem v času izvajanja (prevlada).
PrimerRazred „tabela“ lahko podeduje značilnost razreda „pohištvo“, saj je „miza“ „pohištvo“.Razred "study_table" lahko ima tudi funkcijo "set_color ()", razred "Dining_table" pa lahko ima tudi funkcijo "set_color ()", tako da je mogoče, katero obliko funkcije set_color () priklicati, določiti oboje, čas prevajanja in čas delovanja.

Opredelitev dedovanja:

Dedovanje je ena od ključnih značilnosti OOP-ja, ki močno podpira »ponovno uporabnost«. Ponovno uporabnost bi lahko opisali kot ustvarjanje novega razreda z ponovno uporabo lastnosti obstoječega razreda. V dedovanju obstaja osnovni razred, ki ga podeduje izpeljani razred. Če razred podeduje kateri koli drug razred, član (i) osnovnega razreda postane član (i) izpeljanega razreda.

Splošna oblika podedovanja razreda je naslednja:

 class-izvedeno-ime-razreda: access-specifikator base-class-name {// telo razreda}; 

Tukaj, specifikator dostopa zagotavlja način dostopa (zasebnega, javnega, zaščitenega) do člana (-ov) v osnovnem razredu izpeljanega razreda. Če specifikacija dostopa ni prisotna, se privzeto šteje za »zasebno«. V C ++, če je izpeljani razred »struct«, je specifikacija dostopa privzeto »javna«.

V C ++ je dedovanje mogoče doseči v petih oblikah. Lahko jih razvrstimo kot:

  • Posamezno dedovanje (samo en super razred)
  • Večkratno dedovanje (več superrazredov)
  • Hierarhično dedovanje (en super razred, veliko podrazredov)
  • Večkratno dedovanje (izpeljano iz izpeljanega razreda)

V Javi razred deduje drugi razred z uporabo ključne besede „extends“. V Javi se osnovni razred imenuje super razred, izpeljani razred pa je podklas. Podrazred ne more dostopati do tistih članov osnovnega razreda, ki so razglašeni za »zasebne«. Splošna oblika, ki deduje razred v Javi, je naslednja.

 razred izvedeno-ime-razreda razširja base-class-name {// telo razreda}; 

Java ne podpira dedovanja večkratnega dedovanja, medtem ko podpira hierarhijo na več ravneh. V Javi lahko včasih super razred skrije podrobnosti izvajanja in del tega podatka naredi "zasebnega". Kot v Javi, podrazred ne more dostopati do zasebnih članov nadrazreda in če želi podklasa dostopati do teh članov ali jih inicializirati, potem Java nudi rešitev. Podrazred lahko napoti člane svojega neposrednega nadrazreda z uporabo ključne besede »super«. Ne pozabite, da lahko dostopate samo do članov neposrednega nadrazreda.

"Super" ima dve splošni obliki. Prva je, da jo uporabijo za klic konstruktorja super razreda. Drugi je dostop do člana nadrazreda, ki ga skriva član podrazreda.

 // prva oblika klicanja konstruktorja. razred supper_class {supper_class (argument_list) {..} // konstruktor super razreda}; class sub_class razširja supper_class {sub_class (argument_list) {..} // konstruktor sub_class super (argument_list); // sub_class kliče konstruktor super razreda}}; 
 // sekunda za 'super' razred supper_class {int i; } class sub_class razširja supper_class {int i; sub_class (int a, int b) {super.i = a; "i" super razreda i = b; // 'i' pod razreda}}; 

Opredelitev polimorfizma

Izraz polimorfizem preprosto pomeni „ena funkcija, več oblik“. Polimorfizem je dosežen ob času priprave in v času izvajanja. Polimorfizem časa sestave se doseže s »preobremenitvijo«, medtem ko se polimorfizem časa izvajanja doseže s »prevzemanjem«.

Polimorfizem omogoča predmetu, da se odloči, »katera oblika funkcije, ki naj se prikliče, ko« na obeh, čas prevajanja in čas izvajanja.
Poglejmo prvi koncept preobremenitve. Pri preobremenitvi definiramo funkcijo v razredu večkrat z različnim, podatkovnim tipom in številom parametrov, medtem ko mora biti funkcija, ki jo je treba preobremeniti, vrniti vrsto. Večinoma so funkcije preobremenjenih konstruktorjev razreda.

 preobremenitev razreda {int a, b; public: int preobremenitev (int x) {// prvi konstruktor preobremenitve () a = x; vrnitev a; } int preobremenitev (int x, int y) {// drugi konstruktor preobremenitve () a = x; b = y; vrni a * b; }}; int main () {preobremenitev O1; O1.preobremenitev (20); // prvi preobremenitveni () konstruktor klic O1.overload (20, 40); // drugi preobremenitveni () konstruktorski klic} 

Zdaj pa se pogovorimo o drugi obliki polimorfizma, tj. Koncept prevlade se lahko uvede le v funkcijo razredov, ki prav tako izvajajo koncept dedovanja. V C ++ pred nadgradnjo funkcije sledi ključna beseda »virtualno« v osnovnem razredu in na novo definirana v izpeljanem razredu z istim prototipom, razen ključne besede »virtualno«.

 class base {public: virtual void funct () {// virtualna funkcija osnovnega razreda cout << "To je funkcija osnovnega razreda ()"; }}; razred izveden1: javna baza {javna: void funct () {// navidezna funkcija osnovnega razreda, ki je redefinirana v razredu izvedenih1 cout 

Ključne razlike med dedovanjem in polimorfizmom

  1. Dedovanje ustvarja razred, ki svojo funkcijo izpelje iz že obstoječega razreda. Po drugi strani pa je polimorfizem vmesnik, ki ga lahko definiramo v več oblikah.
  2. Dedovanje se izvaja na razredih, medtem ko se polimorfizem izvaja na metodah / funkcijah.
  3. Ker dedovanje omogoča izpeljanemu razredu, da uporablja elemente in metode, definirane v osnovnem razredu, izpeljanemu razredu ni treba ponovno definirati teh elementov ali metod, tako da lahko povemo, da poveča ponovno uporabo kode in s tem zmanjša dolžino kode. . Po drugi strani polimorfizem omogoča predmetu, da se odloči, katero obliko metode želi priklicati ob času prevajanja in času izvajanja.
  4. Dedovanje je mogoče razvrstiti kot eno dedovanje, večkratno dedovanje, dedovanje na več ravneh, hierarhično dedovanje in hibridno dedovanje. Po drugi strani pa je polimorfizem razvrščen kot preobremenitev in prevlada.

Sklep:

Dedičenje in polimorfizem sta med seboj povezana pojma, saj se dinamični polimorfizem nanaša na razrede, ki tudi izvajajo koncept dedovanja.

Top