Soovitatav, 2024

Toimetaja Valik

Pärandi ja polümorfismi vahe

Pärand lubab, koodide korduvkasutatavus ja polümorfism on ühe funktsiooni esinemine erinevas vormis. Peamine erinevus pärandi ja polümorfismi vahel on see, et pärimine võimaldab programmis juba olemasolevat koodi uuesti kasutada ja polümorfism annab mehhanismi, et otsustada dünaamiliselt, millist vormi kasutatakse.

Võrdluskaart

Võrdluse alusPärandPolümorfism
PõhilinePärand loob uue klassi, kasutades juba olemasoleva klassi omadusi.Polümorfism on põhimõtteliselt mitme vormi ühine liides.
RakendaminePärand rakendatakse põhiliselt klassides.Polümorfismi rakendatakse põhimõtteliselt funktsiooni / meetoditega.
KasutageToetada taaskasutatavuse mõistet OOP-s ja vähendab koodi pikkust.Võimaldab objektil otsustada, millist funktsiooni tuleb kasutada, kui kompileerimise ajal (ülekoormus) ja jooksuaeg (ülekaalus).
VormidPärand võib olla üks pärand, mitmekordne pärand, mitmetasandiline pärand, hierarhiline pärand ja hübriid pärand.Polümorfism võib olla kompileerimisaja polümorfism (ülekoormus) või ajaline polümorfism (ülekaalus).
NäideKlass „laud” võib pärida klassi „mööbel” omadust, sest „laud” on „mööbel”.Klass 'study_table' võib omada ka funktsiooni "set_color ()" ja klassil "Dining_table" võib olla ka funktsioon "set_color ()", nii et millist set_color () funktsiooni vormi, millele tugineda, saab otsustada nii kompileerimise ajal kui ka jooksuaeg.

Pärandi mõiste:

Pärand on üks olulisemaid OOP omadusi, mis toetavad tugevalt „taaskasutatavust”. Taaskasutatavust võib kirjeldada kui uue klassi loomist, kasutades olemasoleva klassi omadusi. Pärimises on olemas põhiklass, mis pärineb tuletatud klassist. Kui klass pärineb mõnest teisest klassist, saab baasklassi liige (d) tuletatud klassi liikmeks (liikmeteks).

Klasside pärimise üldine vorm on järgmine:

 klassi tuletatud klassi nimi: access-spetier base-class-name {// klassi klass}; 

Siin tagab juurdepääsu spetsifikatsioon baasklassis olevale liikmele (privaatsetele, avalikele, kaitstud) juurdepääsu tuletatud klassile. Kui ühtegi juurdepääsuandjat ei ole, peetakse seda vaikimisi "eraviisiliseks". C ++ puhul, kui tuletatud klass on “struct”, siis on juurdepääsu spetsifikatsioon vaikimisi „avalik”.

C ++ puhul võib pärandit saavutada viies vormis. Neid võib liigitada järgmiselt: -

  • Üksik pärand (ainult üks super klass)
  • Mitmekordne pärand (mitu superklassi)
  • Hierarhiline pärand (üks super klass, paljud alaklassid)
  • Mitmekordne pärand (tuletatud tuletatud klassist)

Javais kannab klass teise klassi, kasutades märksõna „laiendab“. Java puhul nimetatakse põhiklassi superklassi ja tuletatud klassi nimetatakse alaklassiks. Alamklass ei pääse neile baasklassi liikmetele, mis on deklareeritud „era-”. Üldine vorm, mis pärineb Java klassis, on järgmine.

 klassi tuletatud klassi nimi laiendab põhiklassi nime {// klassi}; 

Java ei toeta mitme pärandi pärimist, samas kui see toetab mitmetasandilist hierarhiat. Java-i puhul võib mõnikord superklass oma rakenduse üksikasjad varjata ja osa sellest andmetest "eraviisiliselt". Nagu Java-is, ei saa alaliik pääseda superklassi privaatsetele liikmetele ja kui alamklass tahab neid liikmeid juurde pääseda või selle vormindada, siis Java pakub lahendust. Alamklass võib suunata oma vahetu klassi liikmeid märksõna „super” abil. Pidage meeles, et pääsete juurde ainult vahetu klassi liikmetele.

"Super" on kaks üldist vormi. Esimene neist on superklassi ehitaja helistamine. Teiseks on juurdepääs alamklassi liikme peidetud superklassi liikmele.

 // konstruktori helistamise esimene vorm. klass supper_class {supper_class (argument_list) {..} // super klassi konstruktor}; klassi alamklass laiendab supper_class {sub_class (argument_list) {..} // sub_class super konstruktorit (argument_list); // alamklass kutsub super klassi konstruktorit}}; 
 // super-klassi supper_class {int i; teine; } klassi alamklass laiendab supper_class {int i; alamklass (int a, int b) {super.i = a; // 'i' super klassist i = b; // 'i' alamklassist}}; 

Polümorfismi määratlus

Termin "polümorfism" tähendab lihtsalt "ühte funktsiooni, mitut vormi". Polümorfism saavutatakse nii kompileerimise ajal kui ka aja jooksul. Kompileerimisaja polümorfism saavutatakse "ülekoormuse" kaudu, samas kui aja kestuse polümorfism saavutatakse "ülekaaluka" kaudu.

Polümorfism võimaldab objektil otsustada, millist funktsiooni millal kasutada, millal mõlemad kompileerivad aega ja kestvusaega.
Arutame esimest ülekoormuse kontseptsiooni. Ülekoormuse korral määratleme klassi funktsiooni rohkem kui ühe korra erineva andmetüübiga ja parameetrite arvuga, samas kui ülekoormataval funktsioonil peab olema sama tagasipöördumistüüp. Enamasti on ülekoormatud funktsioonid klassi konstruktorid.

 klassi ülekoormus {int a, b; avalik: int ülekoormus (int x) {// esimene ülekoormus () konstruktor a = x; tagastama a; } int ülekoormus (int x, int y) {// teine ​​ülekoormus () konstruktor a = x; b = y; tagastage a * b; }}; int main () {ülekoormus O1; O1.ülekanne (20); // esimese ülekoormuse () konstruktori kõne O1.overload (20, 40); // teine ​​ülekoormuse () konstruktori kõne} 

Nüüd arutame teist polümorfismi vormi, st ülekaalukalt. Ülimuslikkuse mõistet saab rakendada ainult nende klasside funktsioonile, mis rakendavad ka pärandi mõistet. C ++ puhul eelneb ülalnimetatud funktsioonile baasklassis märksõna „virtuaalne” ja määratletakse see tuletatud klassi uuesti sama prototüübiga, välja arvatud märksõna „virtuaalne”.

 class base {public: virtual void funct () {// põhiklassi cout virtuaalne funktsioon << "See on baasklassi funktsioon (); }}; klass tuletatud1: avalik baas {public: void funct () {// põhiklassi virtuaalne funktsioon, mis on uuesti määratletud tuletatud 1 klassi väljal 

Pärandi ja polümorfismi vahelised peamised erinevused

  1. Pärand loob klassi, mis annab selle omaduse juba olemasolevast klassist. Teisest küljest on polümorfism liides, mida saab määratleda mitmes vormis.
  2. Pärand rakendatakse klassides, samas kui polümorfism rakendatakse meetoditel / funktsioonidel.
  3. Kuna pärand võimaldab tuletatud klassil kasutada põhiklassis määratletud elemente ja meetodeid, ei pea tuletatud klass neid elemente määratlema ega uuesti kasutama, siis võime öelda, et see suurendab koodi korduvkasutatavust ja seega vähendab koodi pikkust . Teisest küljest võimaldab polümorfism objektil otsustada, millise meetodi vormi ta soovib kasutada nii kompileerimise ajal kui ka aja jooksul.
  4. Pärandit võib liigitada ühe pärandina, mitme pärandi, mitmetasandilise pärandi, hierarhilise pärandi ja hübriid pärandina. Teisest küljest liigitatakse polümorfism ülekoormuseks ja ülekaaluks.

Järeldus:

Pärand ja polümorfism on omavahel seotud mõisted, sest dünaamiline polümorfism kehtib klassidele, mis rakendavad ka pärandi mõistet.

Top