Diferența dintre moștenire și polimorfism

Autor: Laura McKinney
Data Creației: 1 Aprilie 2021
Data Actualizării: 13 Mai 2024
Anonim
Cele 4 principii ale OOP (abstractizare, incapsulare, mostenire, polimorfism)
Video: Cele 4 principii ale OOP (abstractizare, incapsulare, mostenire, polimorfism)

Conţinut


Moștenirea permite, reutilizarea codului și polimorfismul este, apariția unei funcții cu formă diferită. Diferența de bază între moștenire și polimorfism este că moștenirea permite reutilizarea din nou a codului deja existent într-un program, iar polimorfismul oferă un mecanism pentru a decide dinamic ce formă a unei funcții care trebuie invocată.

  1. Diagramă de comparație
  2. Definiție
  3. Diferențele cheie
  4. Concluzie

Diagramă de comparație

Baza pentru comparațieMoştenirepolimorfismul
De bazăMoștenirea creează o clasă nouă folosind proprietățile clasei deja existente.Polimorfismul este practic o interfață comună pentru forme multiple.
Punerea în aplicareMoștenirea este practic pusă în aplicare pe clase.Polimorfismul este practic implementat pe funcții / metode.
UtilizarePentru a sprijini conceptul de reutilizare în OOP și reduce lungimea codului.Permite obiectului să decidă ce formă a funcției care trebuie invocată atunci când, la compilare timp (supraîncărcare), precum și timp de rulare (prescurtare).
FormulareMoștenirea poate fi o moștenire unică, moștenire multiplă, moștenire pe mai multe niveluri, moștenire ierarhică și moștenire hibridă.Polimorfismul poate fi un polimorfism compila timp (supraîncărcare) sau polimorfism în timp de rulare (suprasolicitare).
ExempluMasa de clasă poate moșteni caracteristica mobilierului de clasă, întrucât o masă este un mobilier.Clasa de studiu_tabila poate avea, de asemenea, funcția set_color (), iar o clasă Dining_table poate avea și funcția set_color (), deci, ce formă a funcției set_color () de invocat poate fi decisă la ambele, să compileze timpul și timpul de rulare.


Definiția moștenirii:

Moștenirea este una dintre caracteristicile cruciale ale OOP, care sprijină puternic „reutilizarea”. Reutilizabilitatea ar putea fi descrisă ca creând o clasă nouă prin reutilizarea proprietăților clasei existente. În moștenire, există o clasă de bază, care este moștenită de clasa derivată. Când o clasă moștenește orice altă clasă, membrul (i) clasei de bază devine membrul (ii) unei clase derivate.

Forma generală de moștenire a unei clase este următoarea:

class derivat-class-name: access-specificier base-class-name {// corpul clasei};

Aici, specificatorul de acces furnizează modul de acces (privat, public, protejat) membrilor (membrilor) din clasa de bază la clasa derivată. Dacă nu există un specificator de acces, implicit, acesta este considerat „privat”. În C ++, dacă clasa derivată este „struct” atunci implicit specificatorul de acces este „public”.

În C ++, moștenirea poate fi realizată în cinci forme. Acestea pot fi clasificate în: -


  • Moștenire unică (o singură super-clasă)
  • Moștenire multiplă (mai multe superclase)
  • Moștenire Ierarhică (o super-clasă, multe subclase)
  • Moștenire multiplă (derivată dintr-o clasă derivată)

În Java, clasa moștenește cealaltă clasă folosind cuvântul cheie „Extended”. În Java, clasa de bază este denumită super-clasă, iar clasa derivată este denumită subclasă. O subclasă nu poate accesa acei membri ai clasei de bază, care sunt declarați „privați”. Forma generală care moștenește clasa în Java este următoarea.

class derivat-class-name extinde baza de clasă-nume {// corpul clasei};

Java nu acceptă moștenirea moștenirii multiple, în timp ce acceptă ierarhia pe mai multe niveluri. În Java, uneori o super-clasă poate dori să ascundă detaliile sale de implementare și face ca o parte din aceste date să fie „private”. Ca și în Java, o subclasă nu poate accesa membrii privați ai superclasei și dacă o subclasă dorește să acceseze sau să inițialeze acești membri, atunci Java oferă o soluție. Subclasa poate referi membrii superclasei sale imediate folosind un cuvânt cheie „super”. Nu uitați, puteți accesa doar membrii superclasei imediate.

„Superul” are două forme generale. Primul este, apelează la constructorul clasei super. Al doilea este acela de a accesa membrul superclasei care a fost ascuns de membrul subclasei.

// prima formă de apelare a constructorului. class supper_class {supper_class (argument_list) {..} // constructor de super-clasă}; class sub_class extinde supper_class {sub_class (argument_list) {..} // constructor al sub_clase super (argument_list); // sub_clasa apelează constructorul clasei super}};

// secundă pentru supper_class de clasă superioară {int i; } clasa sub_clase extinde supper_class {int i; sub_clasa (int a, int b) {super.i = a; // i de super-clasă i = b; // i din subclasa}};

Definiția Polymorphism

Termenul de polimorfism înseamnă pur și simplu „o singură funcție, mai multe forme”. Polimorfismul se realizează atât la timp, cât și la timpul de rulare. Polimorfismul de timp de compilare se realizează prin „supraîncărcare”, în timp ce polimorfismul de timp de rulare se realizează prin „supraîncărcare”.

Polimorfismul permite obiectului să decidă „ce formă a funcției care trebuie invocată atunci când”, compila timpul și timpul de rulare.
Să discutăm despre primul concept de supraîncărcare. În cazul supraîncărcării, definim o funcție din clasă de mai multe ori, cu tipuri de date diferite și numărul de parametri, în timp ce funcția care trebuie supraîncărcată trebuie să aibă același tip de returnare. De cele mai multe ori funcțiile supraîncărcate sunt constructori ai clasei.

suprasarcină de clasă {int a, b; public: int suprasarcină (int x) {// primul supraîncărcare () constructor a = x; returna a; } int supraîncărcare (int x, int y) {// al doilea constructor de suprasarcină () constructor a = x; b = y; a returna a * b; }}; int main () {supraîncărcare O1; O1.overload (20); // primul suprasarcin () constructor apelează O1.overload (20,40); // al doilea apel de constructor de suprasarcină}

Acum, să discutăm a doua formă de polimorfism, adică suprasolicitare. Conceptul de suprasolicitare poate fi implementat doar în funcția claselor care implementează și conceptul de moștenire. În C ++, funcția care trebuie depășită este precedată de cuvântul cheie „virtual” din clasa de bază și redefinită în clasa derivată cu același prototip, cu excepția cuvântului cheie „virtual”.

class base {public: virtual void function () {// funcția virtuală a clasei de bază cout << "Aceasta este o funcție de clasă de bază ()"; }}; class deriv1: public base {public: void function () {// funcția virtuală a clasei de bază redefinite în derivate1 class cout << "Aceasta este o funcție derivată din clase1 ()"; }}; int main () {bază * p, b; derivat1 d1; * P = & b; p-> funct (); // apel la funcția clasei de bază (). * P = & d1; returnare 0; }

  1. Moștenirea creează o clasă care își derivă caracteristica dintr-o clasă deja existentă. Pe de altă parte, polimorfismul este o interfață care poate fi definită în mai multe forme.
  2. Moștenirea este implementată pe clase, în timp ce polimorfismul este implementat pe metode / funcții.
  3. Întrucât moștenirea permite unei clase derivate să utilizeze elementele și metodele definite în clasa de bază, clasa derivată nu are nevoie să definească din nou acele elemente sau metoda, astfel încât putem spune că crește reutilizarea codului și, prin urmare, reduce lungimea codului . Pe de altă parte, polimorfismul face posibil ca un obiect să decidă ce formă a metodei dorește să invoce atât timp cât și timp.
  4. Moștenirea poate fi clasificată ca moștenire unică, moștenire multiplă, moștenire pe mai multe niveluri, moștenire ierarhică și moștenire hibridă. Pe de altă parte, polimorfismul este clasificat ca suprasolicitare și supraîncărcare.

Concluzie:

Moștenirea și polimorfismul sunt concepte interrelaționate, întrucât polimorfismul dinamic se aplică claselor care implementează și conceptul de moștenire.