
Les méthodes dessiner( ) et effacer(
) sont polymorphes. Leur nom est similaire dans les
trois classes dérivées, mais dessiner un cercle
est différent de dessiner un carré ou un triangle.
Ainsi le polymorphisme se résume par : un même
nom, plusieurs implémentations.
A chaque fois que l’on appelle une des deux méthodes
dessiner ou effacer, il est nécessaire que l’on
appelle celle qui est associée à la forme
géométrique correspondante. Ce choix ne peut
se faire qu’à l’exécution, on
a donc une liaison dynamique. La détermination du
choix de la bonne fonction se fait de manière automatique.
On ne s’en s’occupe pas au moment du codage.
En programmation procédurale, on aurait (cliquez
ici) :
En POO (Programmation Orientée Objet), on écrit
(cliquez ici) :
Selon les langages, il est nécessaire de préciser
si une méthode doit être polymorphe ou pas.
C’est le cas en C++, ça ne l’est pas
en Java ou en SmallTalk.
Les avantages du polymorphisme sont les suivants :
- Les fonctions ayant la même sémantique ont
le même nom,
- Le programmation est plus souple. Si on veut ajouter une
classe Rectangle…y’a qu’à ! Il
suffit d’ajouter les méthodes dessiner et effacer
dans cette classe. Dans le cas de la programmation procédurale,
il aurait fallu reprendre le code et l’enrichir.
En résumé : Le polymorphisme permet
d'accéder à un objet (et donc aux méthodes)
d'une sous-classe à partir de la classe de base,
et ce même si cet objet est inconnu lors de la compilation
(il devra néanmoins être connu au moment de
l'exécution !).