Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Introduction au Polymorphisme | Aperçu du Polymorphisme
Programmation Orientée Objet en C++
course content

Contenu du cours

Programmation Orientée Objet en C++

Programmation Orientée Objet en C++

1. Fondamentaux de la POO en C++
2. Constructeurs et Destructeurs
3. Aperçu de l'Encapsulation
4. Aperçu de l'Héritage
5. Aperçu du Polymorphisme

book
Introduction au Polymorphisme

Note
Définition

Le polymorphisme constitue un concept fondamental. Issu du grec signifiant « plusieurs formes », il permet à des objets de différentes classes d'être traités comme un objet d'une superclasse commune. L'aspect le plus important réside dans la capacité de différentes entités à répondre chacune à leur manière au même message ou appel de méthode.

Types de polymorphisme

Il existe deux principaux types de polymorphisme : le polymorphisme à la compilation (statique) et le polymorphisme à l'exécution (dynamique). Comprendre comment et quand utiliser chacun d'eux est essentiel pour écrire un code flexible et efficace.

  • Polymorphisme à la compilation : se produit via la surcharge de fonctions ou d'opérateurs, où la méthode à exécuter est déterminée lors de la compilation.

  • Polymorphisme à l'exécution : utilise des fonctions virtuelles, permettant aux classes dérivées de redéfinir les méthodes de la classe de base, la méthode correcte étant choisie à l'exécution.

Application et nécessité du polymorphisme

Une excellente manière de comprendre le polymorphisme est d'utiliser une analogie du monde réel. Considérons une interface graphique avec un bouton. Ce bouton peut se comporter différemment selon le contexte—il peut fonctionner comme un bouton de téléversement, un bouton de réinitialisation ou un bouton d'annulation.

Chaque bouton exécute une action distincte lorsqu'il est cliqué, mais tous servent essentiellement de boutons. Voici une implémentation théorique de ce concept.

UploadButton.h

UploadButton.h

ResetButton.h

ResetButton.h

CancelButton.h

CancelButton.h

copy
1234
class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };

Étant donné que tous les boutons partagent la même méthode onClick() avec des implémentations différentes, approfondissons ce point. Que se passe-t-il si une fonction doit accepter un objet appartenant à l'une des classes de bouton en tant que paramètre ?

main.cpp

main.cpp

copy
1234567891011
void user_clicked_upload_button(const UploadButton& btn) { btn.onClick(); } void user_clicked_reset_button(const ResetButton& btn) { btn.onClick(); } void user_clicked_cancel_button(const CancelButton& btn) { btn.onClick(); }

Comme vous pouvez le constater, créer manuellement des fonctions séparées pour chaque bouton peut générer de la complexité, en particulier lors des modifications, car chaque fonction doit être modifiée individuellement en cas de problème. De plus, dans la fonction principale, des vérifications supplémentaires seront nécessaires pour déterminer quelle fonction appeler. Le polymorphisme permet de résoudre facilement ces problèmes.

question mark

Quelle est la signification littérale du terme polymorphisme ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 5. Chapitre 1

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

course content

Contenu du cours

Programmation Orientée Objet en C++

Programmation Orientée Objet en C++

1. Fondamentaux de la POO en C++
2. Constructeurs et Destructeurs
3. Aperçu de l'Encapsulation
4. Aperçu de l'Héritage
5. Aperçu du Polymorphisme

book
Introduction au Polymorphisme

Note
Définition

Le polymorphisme constitue un concept fondamental. Issu du grec signifiant « plusieurs formes », il permet à des objets de différentes classes d'être traités comme un objet d'une superclasse commune. L'aspect le plus important réside dans la capacité de différentes entités à répondre chacune à leur manière au même message ou appel de méthode.

Types de polymorphisme

Il existe deux principaux types de polymorphisme : le polymorphisme à la compilation (statique) et le polymorphisme à l'exécution (dynamique). Comprendre comment et quand utiliser chacun d'eux est essentiel pour écrire un code flexible et efficace.

  • Polymorphisme à la compilation : se produit via la surcharge de fonctions ou d'opérateurs, où la méthode à exécuter est déterminée lors de la compilation.

  • Polymorphisme à l'exécution : utilise des fonctions virtuelles, permettant aux classes dérivées de redéfinir les méthodes de la classe de base, la méthode correcte étant choisie à l'exécution.

Application et nécessité du polymorphisme

Une excellente manière de comprendre le polymorphisme est d'utiliser une analogie du monde réel. Considérons une interface graphique avec un bouton. Ce bouton peut se comporter différemment selon le contexte—il peut fonctionner comme un bouton de téléversement, un bouton de réinitialisation ou un bouton d'annulation.

Chaque bouton exécute une action distincte lorsqu'il est cliqué, mais tous servent essentiellement de boutons. Voici une implémentation théorique de ce concept.

UploadButton.h

UploadButton.h

ResetButton.h

ResetButton.h

CancelButton.h

CancelButton.h

copy
1234
class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };

Étant donné que tous les boutons partagent la même méthode onClick() avec des implémentations différentes, approfondissons ce point. Que se passe-t-il si une fonction doit accepter un objet appartenant à l'une des classes de bouton en tant que paramètre ?

main.cpp

main.cpp

copy
1234567891011
void user_clicked_upload_button(const UploadButton& btn) { btn.onClick(); } void user_clicked_reset_button(const ResetButton& btn) { btn.onClick(); } void user_clicked_cancel_button(const CancelButton& btn) { btn.onClick(); }

Comme vous pouvez le constater, créer manuellement des fonctions séparées pour chaque bouton peut générer de la complexité, en particulier lors des modifications, car chaque fonction doit être modifiée individuellement en cas de problème. De plus, dans la fonction principale, des vérifications supplémentaires seront nécessaires pour déterminer quelle fonction appeler. Le polymorphisme permet de résoudre facilement ces problèmes.

question mark

Quelle est la signification littérale du terme polymorphisme ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 5. Chapitre 1
some-alt