Paveldimumo ir polimorfizmo skirtumas

Autorius: Laura McKinney
Kūrybos Data: 1 Balandis 2021
Atnaujinimo Data: 16 Gegužė 2024
Anonim
Difference between multiple alleles and polygenic inheritance
Video.: Difference between multiple alleles and polygenic inheritance

Turinys


Paveldimumas leidžia, pakartotinis kodo panaudojimas ir polimorfizmas yra vienos funkcijos su kita forma atsiradimas. Pagrindinis skirtumas tarp paveldėjimo ir polimorfizmo yra tas, kad paveldėjimas leidžia programoje pakartotinai panaudoti jau turimą kodą, o polimorfizmas suteikia mechanizmą, leidžiantį dinamiškai nuspręsti, kokia funkcijos funkcija bus naudojama.

  1. Palyginimo diagrama
  2. Apibrėžimas
  3. Pagrindiniai skirtumai
  4. Išvada

Palyginimo diagrama

Palyginimo pagrindasPaveldimumasPolimorfizmas
PagrindinisPaveldimumas sukuria naują klasę, naudodamas jau esamos klasės savybes.Polimorfizmas iš esmės yra bendra įvairių formų sąsaja.
ĮgyvendinimasPaveldimumas iš esmės įgyvendinamas klasėse.Polimorfizmas iš esmės įgyvendinamas pagal funkciją / metodus.
NaudokiteParemti pakartotinio naudojimo koncepciją OOP ir sutrumpinti kodo ilgį.Objektui leidžia nuspręsti, kokia funkcijos forma bus naudojama, kompiliavimo metu (perkraunant) ir vykdymo metu (nepaisant).
FormosPaveldėjimas gali būti vienas palikimas, daugkartinis palikimas, daugiapakopis palikimas, hierarchinis palikimas ir hibridinis palikimas.Polimorfizmas gali būti sudarytas laiko polimorfizmas (perkrovimas) arba vykdymo laiko polimorfizmas (viršesnis).
PavyzdysKlasės stalas gali paveldėti klasės baldų bruožą, nes stalas yra baldas.Klasės tyrimas_tabletas taip pat gali turėti funkciją set_color (), o klasė Dining_table - taip pat gali turėti funkciją set_color (), taigi, kurią funkciją set_color () naudoti galima nuspręsti, kurią formą naudoti, rinkti laiką ir laiką.


Paveldėjimo apibrėžimas:

Paveldimumas yra vienas iš esminių OOP bruožų, kurie labai palaiko „pakartotinį naudojimą“. Pakartotinį vartojimą galima apibūdinti kaip naujos klasės sukūrimą pakartotinai naudojant esamos klasės savybes. Paveldėjime yra pagrindinė klasė, kurią paveldi išvestinė klasė. Kai klasė paveldi bet kurią kitą klasę, bazinės klasės narys (-iai) tampa išvestinės klasės nariu (-iais).

Bendra klasės paveldėjimo forma yra tokia:

klasės išvestas klasės pavadinimas: prieigos specifikatorius bazinės klasės pavadinimas {// klasės klasė};

Prieigos specifikatorius suteikia pagrindinės klasės nario (-ių) prieigos būdą (privatų, viešą, apsaugotą) prie išvestinės klasės. Jei nėra prieigos specifikatoriaus, pagal numatytuosius nustatymus jis laikomas „privačiu“. C ++ atveju, jei išvestinė klasė yra „struct“, tada prieigos specifikatorius pagal nutylėjimą yra „public“.

C ++ atveju paveldimumas gali būti pasiektas penkiomis formomis. Jie gali būti klasifikuojami kaip:


  • Paveldimumas (tik viena superklasė)
  • Daugybė paveldėjimo (keli superklasės)
  • Hierarchinis paveldėjimas (viena superklasė, daug poklasių)
  • Daugybinis paveldėjimas (kilęs iš išvestinės klasės)

„Java“ programoje klasė paveldi kitą klasę, naudodama raktinį žodį „pratęsia“. „Java“ bazinė klasė vadinama superklase, o išvestinė klasė nurodoma kaip poklasis. Poklasis negali pasiekti bazinės klasės narių, kurie yra paskelbti „privačiais“. Bendroji „Java“ klasės paveldėjimo forma yra tokia.

klasės išvestas klasės pavadinimas išplečia pagrindinės klasės pavadinimą {// klasės klasė};

„Java“ nepalaiko daugiapakopio paveldėjimo, tuo tarpu palaiko daugiapakopę hierarchiją. „Java“ programoje superklasė gali norėti paslėpti informaciją apie jos įgyvendinimą, todėl kai kuri šių duomenų dalis tampa „privati“. Kaip „Java“, poklasis negali pasiekti privačių superklasės narių, ir jei poklasis nori prieiti prie tų narių arba juos inicijuoti, tada „Java“ pateikia sprendimą. Poklasis gali nurodyti savo artimiausios superklasės narius, naudodamas raktinį žodį „super“. Atminkite, kad prieiti galite tik prie tiesioginio superklasės narių.

„Super“ yra dvi bendros formos. Pirma, tai vadinama super klasės konstruktoriumi. Antrasis yra prieiga prie superklasės nario, kurį paslėpė poklasio narys.

// pirmoji konstruktoriaus iškvietimo forma. klasės supper_class {supper_class (argument_list) {..} // super klasės konstruktorius}; klasės pogrupis pratęsia supper_class {pogrupio (argumentų sąrašas) {..} // poklasio klasės super (argumentų sąrašas) konstruktorių; // sub_class iškviečia super klasės konstruktorių}};

// super klasės super antra klasė {int i; } klasės pogrupis tęsiasi supper_class {int i; poklasis (int a, int b) {super.i = a; // i superklasė i = b; // i poklasio klasė}};

Polimorfizmo apibrėžimas

Terminas polimorfizmas tiesiog reiškia „viena funkcija, kelios formos“. Polimorfizmas pasiekiamas tiek sudarymo, tiek vykdymo metu. Kompiliuoto laiko polimorfizmas pasiekiamas „perkraunant“, tuo tarpu vykdymo laiko polimorfizmas pasiekiamas „nepaisant“.

Polimorfizmas leidžia objektui nuspręsti „kurią funkcijos formą naudoti, kai“, sudarykite laiką ir laiką.
Aptarsime pirmąją perkrovos koncepciją. Perkrovos metu klasėje daugiau nei vieną kartą apibrėžiame funkciją su skirtingais, duomenų tipais ir parametrų skaičiumi, tuo tarpu perkraunama funkcija turi būti to paties grąžinimo tipo. Dažniausiai perkrautos funkcijos yra klasės konstruktoriai.

klasės perkrova {int a, b; public: int overload (int x) {// pirmasis overload () konstruktorius a = x; grąžinti a; } int perkrova (int x, int y) {// antra perkrova () konstruktorius a = x; b = y; grąžinti a * b; }}; int main () {perkrova O1; O1.perkrova (20); // pirmasis perkrovos () konstruktoriaus iškvietimas O1. overload (20,40); // antrasis perkrovos () konstruktoriaus skambutis}

Dabar aptarsime antrąją polimorfizmo formą, t. Y. Viršesnį. Privalumo sąvoka gali būti įgyvendinta tik pagal klases, kurios taip pat įgyvendina paveldėjimo sąvoką. „C ++“ programoje prieš funkciją, kuri turi būti panaikinta, pagrindinėje klasėje yra raktinis žodis „virtualus“, o išvestinėje klasėje jis iš naujo apibrėžiamas tuo pačiu prototipu, išskyrus raktinį žodį „virtualus“.

klasės bazė {public: virtual void funct () {// bazinės klasės cout virtuali funkcija << "Tai bazinių klasių funct ()"; }}; klasės išvestinė1: viešoji bazė {viešoji: negaliojanti funkcija () {// bazinės klasės virtualioji funkcija, apibrėžta išvestinėje1 klasės klasėje << "Tai yra išvestinė1 klasės funkcija ()"; }}; int main () {bazė * p, b; išvestas1 d1; * p = & b; p-> funktas (); // skambutis į bazinės klasės funkciją (). * p = & d1; grįžti 0; }

  1. Paveldimumas sukuria klasę, kuri išveda savo bruožą iš jau egzistuojančios klasės. Kita vertus, polimorfizmas yra sąsaja, kurią galima apibrėžti keliomis formomis.
  2. Paveldimumas įgyvendinamas klasėse, tuo tarpu polimorfizmas yra įgyvendinamas naudojant metodus / funkcijas.
  3. Paveldėjimas leidžia išvestinei klasei naudoti pagrindinėje klasėje apibrėžtus elementus ir metodus, todėl išvestinei klasei nereikia apibrėžti tų elementų ar iš naujo metoduoti, todėl galime pasakyti, kad tai padidina kodo pakartotinį naudojimą ir dėl to sumažina kodo ilgį. . Kita vertus, polimorfizmas leidžia objektui nuspręsti, kokią metodo formą jis nori naudoti tiek rinkimo, tiek vykdymo metu.
  4. Paveldėjimą galima klasifikuoti kaip vienkartinį, daugialypį, daugiapakopį, hierarchinį ir mišrųjį. Kita vertus, polimorfizmas priskiriamas perkrovai ir viršenybei.

Išvada:

Paveldimumas ir polimorfizmas yra tarpusavyje susijusios sąvokos, nes dinaminis polimorfizmas taikomas toms klasėms, kurios taip pat įgyvendina paveldėjimo sąvoką.