Polimorfismo in OOPS: cos'è il polimorfismo [spiegazione dettagliata]

Pubblicato: 2020-11-24

Il polimorfismo negli OOP è inseparabile e un concetto essenziale di ogni linguaggio di programmazione orientato agli oggetti. Un oggetto o un riferimento fondamentalmente può assumere più forme in diverse istanze. Come suggerisce la parola, "poly" significa "molti" e "morph" indica "forme"; quindi, il polimorfismo nel suo insieme significherebbe "una proprietà di avere molte forme".

Il linguaggio di programmazione orientato agli oggetti elabora classi e oggetti tramite un'unica interfaccia. Implementa i concetti di sovraccarico delle funzioni, sovrascrittura e funzioni virtuali. Inoltre, viene in genere utilizzato per strumentare l'ereditarietà nella programmazione.

Leggi: Polimorfismo vs Ereditarietà

Sommario

Un esempio di polimorfismo negli OOP

Il polimorfismo è il metodo in un linguaggio di programmazione orientato agli oggetti che esegue cose diverse secondo la classe dell'oggetto, che lo chiama. Con Polymorphism, un messaggio viene inviato a più oggetti di classe e ogni oggetto risponde in modo appropriato in base alle proprietà della classe.

Di seguito è riportato il codice che spiega chiaramente il polimorfismo:

utilizzare gli avvisi;
# Creazione della classe del pacchetto
pacchetto A;
# Creazione Costruttore
sub nuovo
{
# turno prenderà il nome del pacchetto
# e assegnalo alla variabile 'class'
la mia $classe = turno;
il mio $me stesso = {
'nome' => turno,
'roll_no' => spostamento
};
sottometodo
{
print("Questo appartiene alla classe A ");
}
};
pacchetto B;
# L'array @ISA contiene un elenco
# delle classi principali di quella classe, se presenti
il mio @ISA = (A);

sottometodo
{
print("Questo appartiene alla classe B");
}
pacchetto principale;
B->metodo();
A->metodo();

Produzione:

Questo appartiene alla classe B

Questo appartiene alla classe A

Impara a creare applicazioni come Swiggy, Quora, IMDB e altro

Spiegazione

Per il primo output, il metodo() definito nella classe B sovrascrive la definizione ereditata dalla classe A e viceversa per il secondo output. Questa proprietà è utile per estendere le funzionalità di qualsiasi pacchetto preesistente senza riscrivere l'intera definizione dell'intera classe. Pertanto, rendendo il lavoro facile per il programmatore e il motivo per essere ampiamente utilizzato.

Tipi di polimorfismo in Oops

Nel linguaggio di programmazione orientata agli oggetti (OOPS), ci sono due tipi di polimorfismo come di seguito:

  1. Binding statico (o tempo di compilazione) Polimorfismo, ad esempio, sovraccarico del metodo
  2. Binding dinamico (o Runtime) Polimorfismo, ad es

Fonte

1. Tempo di compilazione o polimorfismo statico

Con Method Overloading, il polimorfismo statico si ottiene nei linguaggi di programmazione orientati agli oggetti che consentono al programmatore di implementare vari metodi. I nomi che usano possono essere gli stessi, ma i loro parametri sono diversi. Alcune condizioni sono favorevoli per il polimorfismo statico come di seguito:

  • I tipi di tutti i parametri dovrebbero essere diversi.
  • La sequenza dei parametri può essere diversa.
  • Il numero di parametri di un metodo dovrebbe differire dall'altro metodo.

In static binding polymorphism , il tipo e il numero di argomenti corrispondenti richiamano le funzioni sovraccaricate.

  • Poiché tutte queste informazioni sono disponibili durante la fase di compilazione, il compilatore seleziona la funzione appropriata.
  • L'overloading della funzione lo fa e l'overloading dell'operatore viene anche definito binding statico o binding anticipato.

Programma

classe A // classe base

{

int a;

pubblico :

visualizzazione vuota ()

{

cout<< “Classe A” ;

}

};

classe B: public A // classe derivata

{

int b;

pubblico :

visualizzazione vuota ()

{

cout<< “Classe B” ;

}

};

Nel programma precedente, il prototipo della funzione display() è lo stesso sia nella classe base che in quella derivata. Pertanto, l'associazione statica non può essere applicata qui. Questo programma funzionerebbe al meglio in fase di esecuzione con un'adeguata selezione di funzioni.

  • Durante il runtime, il compilatore del linguaggio identifica vari metodi identificando le firme di tali metodi.
  • Il compilatore prima identifica la firma del metodo e decide il metodo per una chiamata al metodo specifica durante la compilazione del programma.
  • L'esecuzione di Compile time Polymorphism è molto più veloce ma il processo non è così flessibile.

Leggi anche: Domande sull'intervista OOPS

Runtime o polimorfismo dinamico

In Dynamic Polymorphism, una chiamata a un singolo metodo sottoposto a override viene risolta durante il runtime di un programma. L'override del metodo è uno degli esempi più importanti di Runtime Polymorphism. In questo processo, l'override avviene tramite puntatori e funzioni virtuali.

  • In Method Override, un singolo metodo viene dichiarato in una sottoclasse presente in una classe padre. La classe figlia ottiene un metodo per l'implementazione.
  • Durante il polimorfismo di runtime, la classe offre la propria specifica a un altro metodo ereditato. Questo trasferimento tra metodi si ottiene senza modificare i codici oggetto della classe padre.

Programma

#includi <iostream>

usando lo spazio dei nomi std;

class Animale { // classe base

pubblico :

colore della stringa = “Marrone” ;

};

class Cane: public Animal // Ereditando Animal class.

{

pubblico :

colore stringa = “Verde” ;

};

int main( void ) {

Animale d= Cane();

cout<<d.colore;

}

Produzione:

Marrone

  • Nel polimorfismo in fase di esecuzione, il metodo dell'oggetto viene richiamato in fase di esecuzione anziché in fase di compilazione.
  • È reso possibile dall'override del metodo, che è anche coniato come rilegatura dinamica o rilegatura tardiva.
  • Il processo del polimorfismo dinamico è relativamente più lento ma flessibile del polimorfismo in fase di compilazione.

Differenze B/N in tempo di compilazione e polimorfismo in tempo di esecuzione

Polimorfismo in fase di compilazione Polimorfismo in fase di esecuzione
Invocazione della funzione La funzione viene richiamata in fase di compilazione. La funzione viene richiamata in fase di esecuzione.
Termini comuni È noto come sovraccarico, associazione anticipata e associazione statica. È noto come sovrascrittura, rilegatura tardiva e rilegatura dinamica.
Nome metodo e parametri In Overloading, più di un metodo ha lo stesso nome ma con un diverso numero o tipo di parametri. In Override, più di un metodo ha lo stesso nome, numero e tipo di parametri.
vettori Si ottiene con il funzionamento e il sovraccarico dell'operatore. Si ottiene con funzioni e puntatori virtuali.
Tempo di esecuzione Viene eseguito più velocemente del polimorfismo di runtime in fase di compilazione. Viene eseguito più lentamente del polimorfismo in fase di compilazione in fase di esecuzione.
Flessibilità È meno flessibile poiché tutto viene eseguito in fase di compilazione. È più flessibile poiché tutto viene eseguito in fase di esecuzione.

Parole finali

Il polimorfismo è i concetti da imparare degli OOP in quanto offre numerosi vantaggi durante la programmazione. Con Polymorphism, l'utente può rimodellare le classi e i codici testati. È utile per estendere la programmazione da solo. Consente inoltre all'utente di memorizzare più variabili di tipo diverso come double, Float, Int o Long in un'unica variabile per semplificare la ricerca e l'implementazione.

Se sei interessato a saperne di più sugli OOP e sullo sviluppo di software full-stack, dai un'occhiata al Diploma PG di upGrad e IIIT-B in Sviluppo software full-stack, progettato per i professionisti che lavorano e offre oltre 500 ore di formazione rigorosa, oltre 9 progetti e incarichi, status di Alumni IIIT-B, progetti pratici pratici e assistenza sul lavoro con le migliori aziende.

Diventa uno sviluppatore full stack

UPGRAD E DIPLOMA PG DI IIIT-BANGALORE IN SVILUPPO SOFTWARE
Per saperne di più