Polymorphisme (informatique)

Polymorphisme (informatique)
Page d'aide sur l'homonymie Pour les articles homonymes, voir Polymorphisme.

En informatique, le polymorphisme est l'idée d'autoriser le même code à être utilisé avec différents types, ce qui permet des implémentations plus abstraites et générales.

Polymorphisme paramétré

Le polymorphisme paramétré consiste à définir des fonctions qui peuvent être appliquées à des types paramétrés. Par exemple, il est possible de définir une même fonction concat permettant de concaténer deux listes quel que soit le type de données qu'elles contiennent. Dans ce cas, le type de la fonction concat est noté :

\mathrm{concat} :  \mathrm{liste}_{\alpha} \times \mathrm{liste}_{\alpha} \rightarrow \mathrm{liste}_{\alpha}

où α est un paramètre qui représente le type de données que contiennent les listes. α peut correspondre aux types entier, réel, chaîne de caractères, listeβ, etc.

Le polymorphisme paramétré est utilisé par les langages Caml, Haskell et Scala.


Par exemple, en Haskell, la fonction 'take' renvoie les 'n' premiers éléments d'une liste.

La spécification de la fonction renvoyée par l'interpréteur est :

take :: Int -> [a] -> [a]

Le type 'a' est une variable de type qui correspond à n'importe quel type, c'est donc une fonction qui supporte le polymorphisme paramétré.

Polymorphisme par sous-typage (dérivation)

L'idée est de partir d'un type et de le modifier. Par exemple, on peut créer une classe de base, puis faire des classes dérivées.

Ce concept est associé à l'approche orientée objet.

en C++ :

class Forme {
public:
   virtual float Aire() = 0;
};
 
class Carre:public Forme {
public:
   virtual float Aire() { return m_cote*m_cote; }
private:
   float m_cote;
};
 
class Cercle:public Forme {
public:
   virtual float Aire() { return 3.1415926535*m_rayon*m_rayon; }
private:
   float m_rayon;
};

en Java :

abstract class Forme {
   abstract float aire() ;
}
 
class Carre extends Forme {
   float cote;
   float aire() {
       return cote * cote;
   }
}
 
class Cercle extends Forme {
   float rayon;
   float aire() {
       return Math.PI*rayon*rayon;
   }
}

Grâce aux fonctions virtuelles, on peut faire un algorithme en n'utilisant que la classe de base qui va automatiquement appeler les fonctions des classes dérivées :

en C++ :

float AireTotal(Forme* tabl[], int nb) {
   float s=0;
   for(int i = 0;i<nb; i++) {
      s+= tabl[i]->Aire(); // le programme sait automatiquement quelle fonction appeler
   }
   return s;
}
 
// ...
Forme* tableau[3] = {new Carre, new Cercle, new Carre};
AireTotal(tableau,3);
// ...

en Java :

float aireTotal(Forme[] tabl, int nb) {
   float s=0;
   for(int i = 0; i < nb; i++) {
      s += tabl[i].aire(); // le programme sait automatiquement quelle fonction appeler
   }
   return s;
}
 
// ...
Forme[] tableau = { new Carre(), new Cercle(), new Carre() };
aireT = aireTotal(tableau, 3);   //aireT aura été défini comme float
// ...

Intérêt du polymorphisme

En proposant d'utiliser un même nom de méthode pour plusieurs types d'objets différents, le polymorphisme permet une programmation beaucoup plus générique. Le développeur n'a pas à savoir, lorsqu'il programme une méthode, le type précis de l'objet sur lequel la méthode va s'appliquer. Il lui suffit de savoir que cet objet implémentera la méthode.

Ainsi, un logiciel de calcul d'intérêt pour des comptes bancaires se présenterait de la façon suivante en programmation classique (pseudo code) :

case MonCompteBancaire
 PEA : MonCompteBancaire.calculeInteretPEA
 PEL : MonCompteBancaire.calculeInteretPEL
 LivretA : MonCompteBancaire.calculeInteretLivretA
end case

Si un nouveau type de compte bancaire PERP apparait (et avec lui un nouveau calcul), il sera nécessaire d'une part d'écrire la nouvelle méthode calculeInteretPERP, mais aussi de modifier tous les appels du calcul ci-dessus. Dans le meilleur des cas, celui-ci sera isolé et mutualisé de sorte qu'une seule modification sera nécessaire. Dans le pire des cas, il peut y avoir des centaines d'appels à modifier.

Avec le polymorphisme, toutes les méthodes porteront le même nom "calculeInteret" mais auront des codes différents (un par type de compte). L'appel sera de la forme :

MonCompteBancaire.calculeInteret

Lors de l'arrivée du nouveau compte, aucune modification de ce code ne sera nécessaire. Le choix de la méthode réelle à utiliser sera fait automatiquement à l'exécution par le langage, alors que dans le cas précédent c'est le développeur qui devait programmer ce choix.


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Polymorphisme (informatique) de Wikipédia en français (auteurs)

Игры ⚽ Нужно сделать НИР?

Regardez d'autres dictionnaires:

  • Polymorphisme paramétrique — Polymorphisme (informatique) Pour les articles homonymes, voir Polymorphisme. En informatique, le polymorphisme est l idée d autoriser le même code à être utilisé avec différents types, ce qui permet des implémentations plus abstraites et… …   Wikipédia en Français

  • Polymorphisme paramétré — Polymorphisme (informatique) Pour les articles homonymes, voir Polymorphisme. En informatique, le polymorphisme est l idée d autoriser le même code à être utilisé avec différents types, ce qui permet des implémentations plus abstraites et… …   Wikipédia en Français

  • polymorphisme — ● n. m. ►OROBJ Mécanisme selon lequel un même message peut être envoyé vers des objets de types différents (classes), chaque objet réagissant de façon originale (D après Philip Monnier). Voir aussi polymorphe …   Dictionnaire d'informatique francophone

  • Polymorphisme — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Étymologie Le mot polymorphisme est formé à partir du grec ancien πολλοί (polloí) qui signifie « plusieurs » et μορφος (morphos) qui signifie… …   Wikipédia en Français

  • Virologie informatique — Virus informatique  Pour l’article homonyme, voir Le Virus informatique.  Cet article fait partie de la série Programmes malveillants …   Wikipédia en Français

  • Virus (informatique) — Virus informatique  Pour l’article homonyme, voir Le Virus informatique.  Cet article fait partie de la série Programmes malveillants …   Wikipédia en Français

  • Virus informatique —  Pour l’article homonyme, voir Le Virus informatique pour le magazine.   Ne doit pas être confondu avec logiciel malveillant ni ver informatique. Un virus informatique est un logiciel malveillant conçu pour se propager à d autres… …   Wikipédia en Français

  • Objet (informatique) — Pour les articles homonymes, voir Objet. En informatique, un objet est un conteneur symbolique, qui possède sa propre existence et incorpore des informations et des mécanismes[1] en rapport avec une chose tangible du monde réel manipulée dans un… …   Wikipédia en Français

  • Héritage (informatique) — Pour les articles homonymes, voir Héritage. L’héritage est un concept puissant de la programmation orientée objet, permettant entre autres la réutilisabilité (décomposition du système en composants) et l adaptabilité des objets grâce au… …   Wikipédia en Français

  • Interface en informatique — Interface (informatique) ██████████ …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”