Comment Ca Marche l'informatique ?
Accueil
Forum
Aide
bordure
Page d'accueil
Ajouter aux favoris
Signalez une erreur
Ecrire à Jean-Francois Pillou
Introduction à la POO
Encapsulation
Héritage
Polymorphisme
Version 2.0.3
Le 
polymorphisme Page 
précédente Sites sur le même sujet Télécharger des documentations Retour à la page d'accueil

Définition du polymorphisme

Le nom de polymorphisme vient du grec et signifie qui peut prendre plusieurs formes. Cette caractéristique essentielle de la programmation orientée objet la caractérise

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

  • Le polymorphisme ad hoc (également surcharge ou en anglais overloading)
  • Le polymorphisme d'héritage (également redéfinition, spécialisation ou en anglais overriding)
  • Le polymorphisme paramétrique (également généricité ou en anglais template)

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 confusion existe lorsqu'il s'agit de différencier tout ces polymorphismes.

Le polymorphisme paramétrique

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 sur d'être des filles de la classe objet). Par exemple, la classe complexe, la classe image et la classe lien peuvent avoir une fonction afficher. Cela permettra de ne pas avoir a ce soucier du type de l'objet que l'on a si on souhaite l'afficher a l'écran.

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 ad hoc 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 quelle méthode sera appelée.

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 lui 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 d'héritage

Le polymorphisme d'héritage caractérise la possibilité de redéfinir une méthode dans des classes héritant d'une classe de base. De cette façon il est possible d'appeler la méthode d'un objet sans se soucier de son type intrinsèque.

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 preoccuper de la classe de la pièce


Page 
précédente

Ce document issu de CommentCaMarche.net est soumis à la licence GNU FDL. Vous pouvez copier, modifier des copies de cette page tant que cette note apparaît clairement.