Razlika med dednostjo in polimorfizmom

Avtor: Laura McKinney
Datum Ustvarjanja: 1 April 2021
Datum Posodobitve: 11 Maj 2024
Anonim
Рефакторинг: switch vs if-else vs enum vs HashMap [Шаблон "Команда"]
Video.: Рефакторинг: switch vs if-else vs enum vs HashMap [Шаблон "Команда"]

Vsebina


Dedovanje omogoča, ponovno uporabo kod in polimorfizem, pojav 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 omogoča mehanizem za dinamično odločanje o tem, kakšno obliko funkcije naj se prikliče.

  1. Primerjalna tabela
  2. Opredelitev
  3. Ključne razlike
  4. Zaključek

Primerjalna tabela

Osnove za primerjavoDedovanjePolimorfizem
OsnovniDedovanje ustvarja nov razred z uporabo lastnosti že obstoječega razreda.Polimorfizem je v osnovi običajen vmesnik za več oblik.
IzvajanjeDedovanje se v osnovi izvaja na razredih.Polimorfizem se v osnovi izvaja na funkciji / metodah.
UporabaPodpirati koncept ponovne uporabe v OOP in zmanjšati dolžino kode.Dovoli objektu, da sam odloči, katero obliko funkcije bo priklicalo, ko bo med prevajalnim časom (preobremenitev) kot tudi čas izvajanja (preglasitev).
ObrazciDedovanje je lahko enojno dedovanje, večkratno dedovanje, večstotno dedovanje, hierarhično dedovanje in hibridno dedovanje.Polimorfizem je lahko časovni polimorfizem (preobremenitev) ali polimorfizem med tekom (preglasno).
PrimerRazredna miza lahko podeduje značilnost razrednega pohištva, saj je miza pohištvo.Razredni_predmetni_razred lahko ima tudi funkcijo set_color (), razred Dining_table pa lahko tudi funkcijo set_color (), tako da o obliki funkcije set_color (), ki jo je treba izbrati, lahko določite tako, da sestavite čas in čas izvajanja.


Opredelitev dedovanja:

Dedovanje je ena ključnih značilnosti OOP, ki močno podpira "ponovno uporabo". Ponovna uporabnost bi lahko opisali kot ustvarjanje novega razreda s ponovno uporabo lastnosti obstoječega razreda. Pri dedovanju obstaja osnovni razred, ki ga podeduje izpeljani razred. Ko razred podeduje kateri koli drug razred, postanejo člani osnovnega razreda člani izpeljanega razreda.

Splošna oblika podedovanja razreda je naslednja:

class-class-name-name: specifikator dostopa-ime-osnovnega razreda-imena {// telo razreda};

Tu specifikator dostopa omogoča način dostopa (zasebni, javni, zaščiteni) do članov (-ov) v osnovnem razredu do izpeljanega razreda. Če specifikatorja dostopa ni, se privzeto šteje za »zasebnega«. V C ++ je, če je izpeljani razred "strukturni", potem je specifikacija dostopa privzeto "javna".

Pri C ++ lahko dedovanje dosežemo v petih oblikah. Lahko jih uvrstimo med: -


  • Enojno dedovanje (samo en super razred)
  • Večkratno dedovanje (več superklasov)
  • Hierarhična dediščina (en super razred, veliko podrazredov)
  • Večkratno dedovanje (izhaja iz izpeljanega razreda)

V Javi razred podeduje drugi razred s ključno besedo "extends". Na Javi se osnovni razred imenuje kot super razred, izpeljani razred pa kot podrazred. Podrazred ne more dostopati do tistih članov osnovnega razreda, ki so razglašeni kot "zasebni". Splošna oblika, ki deduje razred v Javi, je naslednja.

class-class-name-ime razširja ime osnovnega razreda {// telo razreda};

Java ne podpira dedovanja večkratnega dedovanja, medtem ko podpira hierarhijo na več ravneh. V Javi včasih super razred morda želi skriti podrobnosti o njegovem izvajanju, zato je del teh podatkov "zaseben". Tako kot v Javi tudi podrazred ne more dostopati do zasebnih članov nadrazreda in če podrazred želi dostopati do teh članov in jih inicializirati, potem Java ponuja rešitev. Podrazred lahko s ključno besedo "super" napoti člane svojega neposrednega podrazreda. Ne pozabite, da lahko dostopate samo do članov neposrednega superrazreda.

Super ima dve splošni obliki. Prvi je, da pokličete konstruktorja super razreda. Drugi je dostop do člana nadrazreda, ki ga je skrbel član podrazreda.

// prva oblika klica konstruktorja. razred supper_class {supper_class (argument_list) {..} // konstruktor super razreda}; razred sub_class razširja supper_class {sub_class (argument_list) {..} // konstruktor sub_class super (argument_list); // sub_class pokliče konstruktor super razreda}};

// drugič za super razred supper_class {int i; } razred sub_class podaljša supper_class {int i; sub_class (int a, int b) {super.i = a; // i super razreda i = b; // i iz podrazreda}};

Opredelitev polimorfizma

Izraz polimorfizem preprosto pomeni „ena funkcija, več oblik“. Polimorfizem dosežemo tako v času prevajanja kot v času izvajanja. Polimorfizem v sestavljanju se doseže s "preobremenitvijo", medtem ko polimorfizem časa izvajanja dosežemo s "preglasitvijo".

Polimorfizem omogoča objektu, da sam odloči, "katero obliko funkcije naj se prikliče" pri obeh, sestaviti čas in čas izvajanja.
Pogovorimo se o prvem konceptu preobremenitve. Pri preobremenitvi določimo funkcijo v razredu večkrat z različnimi vrstami podatkov in številom parametrov, medtem ko mora imeti funkcija, ki jo je treba preobremeniti, isto vrsto vrnitve. Funkcije preobremenjenim so večinoma konstruktorji razreda.

preobremenitev razreda {int a, b; javni: int preobremenitev (int x) {// prvi konstruktor preobremenitve () a = x; vrniti a; } int preobremenitev (int x, int y) {// drugi konstruktor preobremenitve () a = x; b = y; vrne a * b; }}; int main () {preobremenitev O1; O1 preobremenitev (20); // prvi klic konstruktorja overload () O1.overload (20,40); // drugi klic konstruktorja preobremenitve ()

Zdaj pa razpravljajmo o drugi obliki polimorfizma, tj. Koncept prevladovanja je mogoče uporabiti le v funkciji razredov, ki izvajajo tudi koncept dedovanja. V C ++ ima funkcija, ki jo nadomestimo, pred ključno besedo "virtualni" v osnovnem razredu in na novo definirano v izpeljanem razredu z istim prototipom, razen ključne besede "virtualni".

class base {public: virtual void funct () {// virtualna funkcija osnovnega razreda cout << "To je osnovni razred funct ()"; }}; razred izveden1: javna baza {public: void funct () {// virtualna funkcija osnovnega razreda, na novo definirana v izveden1 class cout << "To je izveden1 razred funkcij ()"; }}; int main () {osnova * p, b; izpeljan1 d1; * p = & b; p-> funct (); // klic v osnovni razred funct (). * p = & d1; vrne 0; }

  1. Dedovanje ustvarja razred, ki svojo značilnost izhaja iz že obstoječega razreda. Po drugi strani je polimorfizem vmesnik, ki ga je mogoče definirati v več oblikah.
  2. Dedovanje se izvaja na razredih, polimorfizem pa se izvaja na metodah / funkcijah.
  3. Ker dedovanje izpeljanemu razredu omogoča uporabo elementov in metod, opredeljenih v osnovnem razredu, izpeljanemu razredu ni treba definirati teh elementov ali ga ponovno obdelati, zato lahko rečemo, da poveča ponovno uporabo kode in s tem zmanjša dolžino kode . Po drugi strani pa polimorfizem omogoča, da se predmet sam odloči, kakšno obliko metode želi uporabiti tako v času prevajanja kot v času izvajanja.
  4. Dedovanje lahko uvrstimo v eno samo dedovanje, večkratno dedovanje, večstotno dedovanje, hierarhično dedovanje in hibridno dedovanje. Po drugi strani pa polimorfizem uvrščamo med preobremenitve in prenajedanje.

Zaključek:

Dediščina in polimorfizem sta med seboj povezana pojma, saj dinamični polimorfizem velja za razrede, ki izvajajo tudi koncept dedovanja.