Polymorphisme dans OOPS : qu'est-ce que le polymorphisme [explication détaillée]
Publié: 2020-11-24Le polymorphisme dans les POO est inséparable et un concept essentiel de tout langage de programmation orienté objet. Un objet ou une référence peut essentiellement prendre plusieurs formes dans différentes instances. Comme le mot le suggère, 'poly' signifie 'beaucoup' et 'morph' points à des 'formes'; ainsi, le polymorphisme dans son ensemble signifierait «une propriété d'avoir plusieurs formes».
Le langage de programmation orienté objet traite les classes et les objets par une seule interface. Il implémente les concepts de surcharge de fonctions, de remplacement et de fonctions virtuelles. En outre, il est généralement utilisé pour instrumenter l'héritage dans la programmation.
Lire : Polymorphisme vs héritage
Table des matières
Un exemple de polymorphisme dans les POO
Le polymorphisme est la méthode dans un langage de programmation orienté objet qui effectue différentes choses selon la classe de l'objet, qui l'appelle. Avec le polymorphisme, un message est envoyé à plusieurs objets de classe et chaque objet répond de manière appropriée en fonction des propriétés de la classe.
Voici le code qui explique clairement le polymorphisme :
utiliser des avertissements ;
# Création d'une classe de package
paquet A ;
# Création d'un constructeur
sous nouveau
{
# shift prendra le nom du package
# et affectez-le à la variable 'class'
ma $classe = shift;
mon $moi = {
'nom' => décalage,
'roll_no' => décalage
} ;
sous-méthode
{
print("Ceci appartient à la classe A ");
}
} ;
paquet B ;
# Le tableau @ISA contient une liste
# des classes parentes de cette classe, le cas échéant
mon @ISA = (A);

sous-méthode
{
print("Ceci appartient à la classe B");
}
paquet principal ;
B->méthode();
A->méthode();
Sortir:
Cela appartient à la classe B
Cela appartient à la classe A
Apprenez à créer des applications comme Swiggy, Quora, IMDB et plus
Explication
Pour la première sortie, la méthode () définie dans la classe B remplace la définition héritée de la classe A et vice-versa pour la deuxième sortie. Cette propriété est utile pour étendre les fonctionnalités de tout package préexistant sans réécrire la définition complète de la classe entière. Ainsi, rendant le travail facile pour le programmeur et la raison d'être largement utilisé.
Types de polymorphisme dans Oops
Dans le langage de programmation orientée objet (OOPS), il existe deux types de polymorphisme comme ci-dessous :
- Polymorphisme de liaison statique (ou temps de compilation), par exemple, surcharge de méthode
- Polymorphisme de liaison dynamique (ou d'exécution), par exemple, remplacement de méthode

La source
1. Temps de compilation ou polymorphisme statique
Avec la surcharge de méthodes, le polymorphisme statique est obtenu dans les langages de programmation orientés objet qui permettent au programmeur d'implémenter diverses méthodes. Les noms qu'ils utilisent peuvent être les mêmes, mais leurs paramètres sont différents. Certaines conditions sont propices au polymorphisme statique comme ci-dessous :
- Les types de tous les paramètres doivent être différents.
- La séquence des Paramètres peut être différente.
- Le nombre de paramètres d'une méthode doit différer de l'autre méthode.
Dans le polymorphisme de liaison statique , le type et le nombre d'arguments correspondants appellent les fonctions surchargées.
- Comme toutes ces informations sont disponibles au moment de la compilation, le compilateur sélectionne la fonction appropriée.
- La surcharge de fonction le fait, et la surcharge d'opérateur est également appelée liaison statique ou liaison anticipée.
Programme
classe A // classe de base
{
int un ;
publique :
annuler l'affichage()
{
cout<< « Classe A » ;
}
} ;
classe B : public A // classe dérivée
{
entier b ;
publique :
annuler l'affichage()
{
cout<< "Classe B" ;
}
} ;
Dans le programme ci-dessus, le prototype de la fonction display() est le même dans les classes de base et dérivées. Par conséquent, la liaison statique ne peut pas être appliquée ici. Ce programme fonctionnerait mieux au moment de l'exécution avec une sélection appropriée de fonctions.
- Pendant l'exécution, le compilateur du langage identifie diverses méthodes en identifiant les signatures de ces méthodes.
- Le compilateur identifie d'abord la signature de la méthode et décide de la méthode pour un appel de méthode spécifique lors de la compilation du programme.
- L'exécution du polymorphisme au moment de la compilation est beaucoup plus rapide, mais le processus n'est pas aussi flexible.
Lisez aussi: Questions d'entrevue OOPS
Exécution ou polymorphisme dynamique
Dans le polymorphisme dynamique, un appel à une seule méthode surchargée est résolu pendant l'exécution d'un programme. Le remplacement de méthode est l'un des principaux exemples de polymorphisme d'exécution. Dans ce processus, le remplacement est effectué via des pointeurs et des fonctions virtuelles.
- Dans Method Overriding, une seule méthode est déclarée dans une sous-classe présente dans une classe parent. La classe enfant obtient une méthode d'implémentation.
- Pendant le polymorphisme d'exécution, la classe offre sa propre spécification à une autre méthode héritée. Ce transfert entre méthodes est réalisé sans modifier les codes des objets de la classe mère.
Programme
#include <iostream>
en utilisant l' espace de noms std ;
class Animal { // classe de base
publique :
couleur de chaîne = "Marron" ;
} ;
classe Chien : public Animal // héritant de la classe Animal.
{
publique :
couleur de chaîne = "Vert" ;
} ;
int main( void ) {
Animal d= Chien();
cout<<d.color;

}
Sortir:
marron
- Dans le polymorphisme d'exécution, la méthode de l'objet est appelée au moment de l'exécution au lieu de la compilation.
- Cela est rendu possible par le remplacement de méthode, qui est également appelé liaison dynamique ou liaison tardive.
- Le processus de polymorphisme dynamique est comparativement plus lent mais flexible que le polymorphisme au moment de la compilation.
Différences B/W Polymorphisme à la compilation et à l'exécution
Polymorphisme au moment de la compilation | Polymorphisme d'exécution | |
Appel de la fonction | La fonction est invoquée au moment de la compilation. | La fonction est appelée au moment de l'exécution. |
Termes communs | C'est ce qu'on appelle la surcharge, la liaison précoce et la liaison statique. | Il est connu sous le nom de remplacement, de liaison tardive et de liaison dynamique. |
Nom et paramètres de la méthode | Dans Overloading, plusieurs méthodes ont le même nom mais avec un nombre ou un type de paramètres différent. | Dans Override, plusieurs méthodes ont le même nom, nombre et type de paramètres. |
Transporteurs | Ceci est réalisé avec une surcharge de fonctions et d'opérateurs. | Il est réalisé avec des fonctions virtuelles et des pointeurs. |
Temps d'exécution | Il s'exécute plus rapidement que le polymorphisme d'exécution au moment de la compilation. | Il s'exécute plus lentement que le polymorphisme de compilation au moment de l'exécution. |
Souplesse | Il est moins flexible car tout s'exécute au moment de la compilation. | Il est plus flexible car tout s'exécute au moment de l'exécution. |
Derniers mots
Le polymorphisme est le concept incontournable des POO car il offre plusieurs avantages lors de la programmation. Avec Polymorphism, l'utilisateur peut remodeler les classes et les codes testés. Il est utile pour étendre la programmation par lui-même. Il permet également à l'utilisateur de stocker plusieurs variables de type différent telles que double, Float, Int ou Long dans une seule variable pour simplifier leur recherche et leur mise en œuvre.
Si vous souhaitez en savoir plus sur les POO et le développement de logiciels à pile complète, consultez le diplôme PG upGrad & IIIT-B en développement de logiciels à pile complète, conçu pour les professionnels en activité et offrant plus de 500 heures de formation rigoureuse, plus de 9 projets. et affectations, statut d'ancien de l'IIIT-B, projets de synthèse pratiques et aide à l'emploi avec les meilleures entreprises.