Polimorfismul în OOPS: Ce este polimorfismul [Explicație detaliată]

Publicat: 2020-11-24

Polimorfismul în POO este inseparabil și un concept esențial al oricărui limbaj de programare orientat pe obiecte. Un obiect sau o referință, practic, poate lua mai multe forme în cazuri diferite. După cum sugerează cuvântul, „poli” înseamnă „multe” și puncte „morf” la „forme”; astfel, polimorfismul în ansamblu ar însemna „o proprietate de a avea mai multe forme”.

Limbajul de programare orientat pe obiecte procesează clase și obiecte printr-o singură interfață. Implementează conceptele de supraîncărcare a funcțiilor, suprascriere și funcții virtuale. De asemenea, este folosit de obicei pentru instrumentarea moștenirii în programare.

Citiți: Polimorfism vs Moștenire

Cuprins

Un exemplu de polimorfism în POO

Polimorfismul este metoda dintr-un limbaj de programare orientat pe obiecte care efectuează diferite lucruri conform clasei obiectului, care îl numește. Cu Polymorphism, un mesaj este trimis către mai multe obiecte de clasă și fiecare obiect răspunde corespunzător în funcție de proprietățile clasei.

Următorul este codul care explică clar polimorfismul:

folosiți avertismente;
# Crearea clasei de pachet
pachetul A;
# Crearea constructorului
sub nou
{
# shift va lua numele pachetului
# și atribuiți-l variabilei „class”
my $class = shift;
my $self = {
'nume' => shift,
'roll_no' => shift
};
submetoda
{
print(„Acesta aparține clasei A”);
}
};
pachetul B;
# Matricea @ISA conține o listă
# dintre clasele părinte ale acelei clase, dacă există
@ISA mea = (A);

submetoda
{
print(„Acesta aparține clasei B”);
}
pachet principal;
B->metoda();
A->metoda();

Ieșire:

Aceasta aparține clasei B

Aceasta aparține clasei A

Învață să construiești aplicații precum Swiggy, Quora, IMDB și multe altele

Explicaţie

Pentru prima ieșire, metoda () definită în clasa B suprascrie definiția moștenită de la clasa A și invers pentru a doua ieșire. Această proprietate este utilă în extinderea funcționalității oricărui pachet preexistent fără a rescrie întreaga definiție a întregii clase. Astfel, ușurând munca programatorului și motivul pentru care este utilizat pe scară largă.

Tipuri de polimorfism în Oops

În limbajul de programare orientată pe obiecte (OOPS), există două tipuri de polimorfism, după cum urmează:

  1. Polimorfism de legare statică (sau timp de compilare), de exemplu, supraîncărcarea metodei
  2. Polimorfism de legare dinamică (sau de rulare), de exemplu, suprascrierea metodei

Sursă

1. Timp de compilare sau polimorfism static

Cu Method Overloading, polimorfismul static este realizat în limbaje de programare orientată pe obiecte care permit programatorului să implementeze diverse metode. Numele pe care le folosesc pot fi aceleași, dar parametrii lor sunt diferiți. Anumite condiții sunt favorabile pentru polimorfismul static, după cum urmează:

  • Tipurile de toți parametrii ar trebui să fie diferite.
  • Secvența parametrilor poate fi diferită.
  • Numărul de parametri ai unei metode ar trebui să difere de cealaltă metodă.

În polimorfismul de legare static , tipul de potrivire și numărul de argumente invocă funcțiile supraîncărcate.

  • Deoarece toate aceste informații sunt disponibile în timpul compilării, compilatorul selectează funcția corespunzătoare.
  • Funcția de supraîncărcare face acest lucru, iar supraîncărcarea operatorului este, de asemenea, denumită legare statică sau legarea timpurie.

Program

clasa A // clasa de bază

{

int a;

public :

void display()

{

cout<< „Clasa A” ;

}

};

clasa B: public A // clasa derivata

{

int b;

public :

void display()

{

cout<< „Clasa B” ;

}

};

În programul de mai sus, prototipul funcției display() este același în ambele clase de bază și derivate. Prin urmare, legarea statică nu poate fi aplicată aici. Acest program ar rula cel mai bine în timpul rulării cu o selecție adecvată de funcții.

  • În timpul de rulare, compilatorul limbajului identifică diferite metode prin identificarea semnăturilor acelor metode.
  • Compilatorul identifică mai întâi semnătura metodei și decide metoda pentru un anumit apel de metodă în timpul compilării programului.
  • Execuția pentru Polimorfism în timp de compilare este mult mai rapidă, dar procesul nu este atât de flexibil.

Citiți și: Întrebări de interviu OOPS

Timp de rulare sau polimorfism dinamic

În polimorfismul dinamic, un apel la o singură metodă suprascrisă este rezolvat în timpul rulării unui program. Suprascrierea metodei este unul dintre exemplele proeminente de polimorfism de rulare. În acest proces, suprascrierea se face prin pointeri și funcții virtuale.

  • În Suprascrierea metodei, o singură metodă este declarată într-o subclasă prezentă într-o clasă părinte. Clasa copil dobândește o metodă de implementare.
  • În timpul polimorfismului de rulare, clasa oferă specificarea proprie altei metode moștenite. Acest transfer între metode se realizează fără modificarea codurilor obiectelor clasei părinte.

Program

#include <iostream>

folosind namespace std;

class Animal { // clasa de bază

public :

culoarea șirului = „Maro” ;

};

clasă Câine: animal public // moştenire clasă Animal.

{

public :

culoarea șirului = „Verde” ;

};

int main( void ) {

Animal d= Câine();

cout<<d.culoare;

}

Ieșire:

Maro

  • În polimorfismul Runtime, metoda obiectului este invocată în timpul rulării în loc de timpul compilării.
  • Este posibilă prin suprascrierea metodei, care este, de asemenea, inventată ca legare dinamică sau legare tardivă.
  • Procesul de polimorfism dinamic este comparativ mai lent, dar flexibil decât polimorfismul în timp de compilare.

Diferențele B/N Compile-Time și Run-Time Polimorfism

Polimorfism în timp de compilare Polimorfismul în timp de rulare
Invocarea funcției Funcția este invocată în momentul compilării. Funcția este invocată în timpul rulării.
Termeni uzuali Este cunoscut sub numele de supraîncărcare, legarea timpurie și legarea statică. Este cunoscut sub numele de suprascriere, legare tardivă și legare dinamică.
Numele și parametrii metodei În supraîncărcare, mai multe metode au același nume, dar cu un număr sau un tip diferit de parametri. În Overriding, mai multe metode au același nume, număr și tip de parametri.
Transportatorii Se realizează prin supraîncărcare funcțională și operator. Se realizează cu funcții și pointeri virtuale.
Timpul de execuție Se execută mai rapid decât polimorfismul de rulare la momentul compilării. Se execută mai lent decât polimorfismul în timp de compilare în timpul rulării.
Flexibilitate Este mai puțin flexibil, deoarece totul se execută în timpul compilării. Este mai flexibil, deoarece totul se execută în timpul rulării.

Cuvinte finale

Polimorfismul este conceptele care trebuie învățate ale POO, deoarece oferă mai multe avantaje în timpul programării. Cu Polymorphism, utilizatorul poate remodela clasele și codurile testate. Este util în extinderea programării de la sine. De asemenea, permite utilizatorului să stocheze mai multe variabile de tip diferit, cum ar fi double, Float, Int sau Long într-o singură variabilă, pentru a simplifica căutarea și implementarea acestora.

Dacă sunteți interesat să aflați mai multe despre POO, dezvoltarea de software full-stack, consultați diploma PG de upGrad și IIIT-B în dezvoltare software full-stack, care este concepută pentru profesioniști care lucrează și oferă peste 500 de ore de formare riguroasă, peste 9 proiecte și misiuni, statutul de absolvenți IIIT-B, proiecte practice practice și asistență la locul de muncă cu firme de top.

Deveniți un dezvoltator Full Stack

UPGRAD SI DIPLOMA PG IN DEZVOLTARE DE SOFTWARE LUI IIIT-BANGALORE
Aflați mai multe