Flux rss
Collection CommentÇaMarche.net
Héritage

POO - Le polymorphisme

 
Bookmark Ajouter aux favoris / Partager
POO - Il polimorfismo POO - Le polimorfismo OOP - Der Polymorphismus OOP - Polimorfismo OOP - Polymorphism

Définition du polymorphisme

Le nom de polymorphisme vient du grec et signifie qui peut prendre plusieurs formes. Cette caractéristique est un des concepts essentiels de la programmation orientée objet. Alors que l'héritage concerne les classes (et leur hiérarchie), le polymorphisme est relatif aux méthodes des objets.

On distingue généralement trois types de polymorphisme :

Les différents types de polymorphisme

Nous allons maintenant tenter de définir plus précisément tout cela, mais il est important de noter que beaucoup de confusions existent lorsqu'il s'agit de différencier tous ces types de polymorphisme.

Le polymorphisme ad hoc

Le polymorphisme ad hoc permet d'avoir des fonctions de même nom, avec des fonctionnalités similaires, dans des classes sans aucun rapport entre elles (si ce n'est bien sûr d'être des filles de la classe objet). Par exemple, la classe complexe, la classe image et la classe lien peuvent avoir chacune une fonction "afficher". Cela permettra de ne pas avoir à se soucier du type de l'objet que l'on a si on souhaite l'afficher à l'écran.

Le polymorphisme ad hoc permet ainsi de définir des opérateurs dont l'utilisation sera différente selon le type des paramètres qui leur sont passés. Il est donc possible par exemple de surcharger l'opérateur + et de lui faire réaliser des actions différentes selon qu'il s'agit d'une opération entre deux entiers (addition) ou entre deux chaînes de caractères (concaténation).

Le polymorphisme paramétrique

Le polymorphisme paramétrique, appelé généricité, représente la possibilité de définir plusieurs fonctions de même nom mais possédant des paramètres différents (en nombre et/ou en type). Le polymorphisme paramétrique rend ainsi possible le choix automatique de la bonne méthode à adopter en fonction du type de donnée passée en paramètre.

Ainsi, on peut par exemple définir plusieurs méthodes homonymes addition() effectuant une somme de valeurs.

  • La méthode int addition(int, int) pourra retourner la somme de deux entiers
  • La méthode float addition(float, float) pourra retourner la somme de deux flottants
  • La méthode char addition(char, char) pourra définir au gré de l'auteur la somme de deux caractères
  • etc.

On appelle signature le nombre et le type (statique) des arguments d'une fonction. C'est donc la signature d'une méthode qui détermine laquelle sera appelée.

Le polymorphisme d'héritage

La possibilité de redéfinir une méthode dans des classes héritant d'une classe de base s'appelle la spécialisation. Il est alors possible d'appeler la méthode d'un objet sans se soucier de son type intrinsèque : il s'agit du polymorphisme d'héritage. Ceci permet de faire abstraction des détails des classes spécialisées d'une famille d'objet, en les masquant par une interface commune (qui est la classe de base).

Imaginons un jeu d'échec comportant des objets roi, reine, fou, cavalier, tour et pion, héritant chacun de l'objet piece.
La méthode mouvement() pourra, grâce au polymorphisme d'héritage, effectuer le mouvement approprié en fonction de la classe de l'objet référencé au moment de l'appel. Cela permettra notamment au programme de dire piece.mouvement sans avoir à se préoccuper de la classe de la pièce.

Dernière modification le mardi 14 octobre 2008 à 17:40:30.Ce document intitulé « POO - Le polymorphisme » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Surcharge et polymorphisme Je ne saisi pas bien la différence entre le polymorphisme et la surcharge d'opérateurs : dans les deux cas la fonction s'adapte aux types de paramètres entré ou ya-t-il une notion plus subtile qui m'aurait échapée ? www.commentcamarche.net/forum/affich-120063-surcharge-et-polymorphisme
C++ POO Bonjour, Après réalisation d'un prgme qui fonctionne en C++, avec BORLAND BCW 4.2, je recherche une explication technique complémentaire afin d'obtenir le résultat exposé ci- dessous. le prgme est une base de données mettant en évidence la POO, avec... www.commentcamarche.net/forum/affich-1401306-c-poo
[Optimisation] Polymorphisme “statique” Le polymorphisme est l'une des pierres angulaires du paradigme objet : - http://www.commentcamarche.net/poo/polymorp.php3 En C++, il s'exprime sous la forme de fonctions virtuelles : celles-ci permettent d'adapter dynamiquement (i.e. à l'exécution)... www.commentcamarche.net/faq/sujet-247-optimisation-polymorphisme-statique
Le mot-clé static ou les attributs et méthodes de classe en POO(NOTE: Cet article explique la signification du mot-clé static au sein d'une classe. La signification de "static" en C n'a par exemple rien à voir.) Vous êtes débutant en programmation orientée objet. En Java, en C++...ou que sais-je encore.,... www.commentcamarche.net/faq/sujet-14564-le-mot-cle-static-ou-les-attributs-et-methodes-de-classe-en-poo
Introduction au Dark BasicGrand merci à DJ Fire-Black qui est l'auteur de cette astuce. Introduction Pourquoi choisir DarkBASIC plutôt qu'un langage POO ? DarkBASIC est simplifié, par rapport aux langages POO (Programmation Orientée Objet) et vous fera gagner un temps... www.commentcamarche.net/faq/sujet-10586-introduction-au-dark-basic
[php5 poo]plusieurs constructeurs de classe (Résolu)Bonjour, Je réalise une application en php5, et j'aurais besoins d'avoir des constructeur différents apparemment cela n'est pas possible avec php5. Quelqu'un aurait-il une idée pour contourner le problème? Merci de votre aide www.commentcamarche.net/forum/affich-11438176-php5-poo-plusieurs-constructeurs-de-classe
POO en PHP5 (Résolu)Bonjour, Je dois mettre en place un service web catalogue que voici: import java.util.Hashtable; /** * Simple classe java qui fera office de service web ... */ public class ServiceCatalogue{ private Hashtable catalogue; public... www.commentcamarche.net/forum/affich-5112341-poo-en-php5
Notion d'interface au poo (Résolu)Bonjour, mes amies pouvez -vous m'aider à preparer un exposé sur les notions d'interface au programmation orienté objet en vb.net et merci beaucoup mes amis les programmeur www.commentcamarche.net/forum/affich-5817339-notion-d-interface-au-poo
POO - Encapsulation des donnéesLe concept d'encapsulation L'encapsulation est un mécanisme consistant à rassembler les données et les méthodes au sein d'une structure en cachant l'implémentation de l'objet, c'est-à-dire en empêchant l'accès aux données par un autre moyen que les... www.commentcamarche.net/contents/poo/encapsul.php3
Introduction à la programmation orientée objetUn nouveau concept de développement Extrait de « Au coeur de ActiveX et OLE », de David Chappel "Au cours des 35 dernières années, les concepteurs de matériel informatique sont passés de machines de la taille d'un hangar à des ordinateurs... www.commentcamarche.net/contents/poo/poointro.php3
POO - HéritageLa notion d'héritage L'héritage (en anglais inheritance) est un principe propre à la programmation orientée objet, permettant de créer une nouvelle classe à partir d'une classe existante. Le nom d'"héritage" (pouvant parfois être appelé dérivation... www.commentcamarche.net/contents/poo/heritage.php3