Les bases du polymorphisme
273
On parle souvent de « compatibilité par affectation » entre un type classe et un type ascendant. Notez que les affectations légales sont celles qui exploitent la relation « est » induite par
l’héritage ; ici, on peut dire qu’un point coloré est un point, mais on ne peut pas dire qu’un
point est un point coloré. Nous allons voir maintenant comment la ligature dynamique permet d’aller plus loin dans l’exploitation de cette relation, en aurorisant d’appliquer à un point
coloré les opérations applicables à un point.
1.2 La ligature dynamique
Considérons maintenant ces instructions :
Point p
p := Création Point (3, 5)
p.affiche
// appelle la méthode affiche de la classe Point
p := Création Poincol (4, 8, 2)
p.affiche
// appelle la méthode affiche de la classe Pointcol
Dans la dernière instruction, la variable p est de type Point, alors que l’objet référencé par p
est de type Pointcol. L’instruction p.affiche appelle alors la méthode affiche de la
classe Pointcol. Autrement dit, elle se fonde, non pas sur le type de la variable p, mais bel
et bien sur le type effectif de l’objet référencé par p au moment de l’appel (ce type pouvant
évoluer au fil de l’exécution). Ce choix d’une méthode au moment de l’exécution, basé sur la
nature exacte de l’objet référencé porte généralement le nom de ligature dynamique (ou
encore de liaison dynamique).
1.3 En résumé
En résumé, le polymorphisme se traduit par :
• la compatibilité par affectation entre un type classe et un type ascendant,
• la ligature dynamique des méthodes.
Le polymorphisme permet d’obtenir un comportement adapté à chaque type d’objet, sans
avoir besoin de tester sa nature de quelque façon que ce soit. La richesse de cette technique
amène parfois à dire que l’instruction si est à la POO ce que l’instruction goto est à la programmation structurée (voir remarque ci-après). Autrement dit, le bon usage de la POO (et
du polymorphisme) permet parfois d’éviter des instructions de test, de même que le bon
usage de la programmation structurée permettait d’éviter l’instruction goto.
Remarque
Ce que nous avons nommé « programmation procédurale », basée sur l’utilisation des procédures et des structures fondamentales (choix et répétitions), s’est aussi appelé
« programmation structurée ». Avant la généralisation de ce type de programmation, certains
langages utilisaient des instructions de branchement conditionnel ou inconditionnel, désignés
souvent par « goto ».
Précédent

- 296/370

Suivant