Le polymorphisme
CHAPITRE 13
274
1.4 Cas de la gestion par valeur
Comme on l’ a vu, le polylorphisme se fonde sur des références, en distinguant la nature de la
référence d’une part, celle de l’objet référencé d’autre part. Dans les langages gérant les
objets par valeur, le polymorphisme n’existe plus vraiment. Certes, on y trouve une compatibilité d’affectation, laquelle recopie simplement une partie d’un des objets dans l’autre :
Point p (3, 8)
Pointcol pc (4, 9, 3)
.....
p := pc
// autorisé : recopie seulement les attributs abs et ord de pc dans p
pc := p
// interdit
Quant à la ligature dynamique, elle n’a plus d’existence possible : quoi qu’il arrive, ici, p
désignera toujours un objet de type Point et pc un objet de type Pointcol. Autrement dit,
p.affiche appellera toujours la méthode affiche de la classe Point.
Remarque
Lorsqu’un langage gère les objets par valeur, il ne s’agit généralement que d’une option par
défaut qui se trouve complétée par un mécanisme de gestion par référence qu’il suffit alors de
mettre convenablement en œuvre pour retrouver les possibilités du polymorphisme (voyez
les rubriques « Côté langages » et « Exemples langages » de ce chapitre.
1.5 Exemple 1
Voici un premier exemple intégrant les situations exposées ci-dessus dans un programme
complet :
Point p
Pointcol pc
p := Création Point (3, 5)
p.affiche
// appelle affiche de Point
pc := Création Pointcol (4, 8, 2)
p := pc
// p de type Point, référence un objet de type Pointcol
p.affiche
// on appelle affiche de Pointcol
p := Création Point (5, 7) // p référence a nouveau un objet de type Point
p.affiche
// on appelle affiche de Point
classe Point
{ méthode Point (entier x, entier y)
{ abs := x ; ord := y
}
méthode déplace (entier dx, entier dy)
{ abs := abs + dx ; ord :=ord + dy
}
méthode affiche
{ écrire «Je suis en », abs, « », y
}
entier abs, ord
}
Précédent

- 297/370

Suivant