“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 298 — #308
i
i
i
i
i
i
i
i
298
6
• La programmation orientée objet
class CompositeFigure from Figure LinkedList
meth init
LinkedList,init
end
meth move(X Y)
{self forall(move(X Y))}
end
meth display
{self forall(display)}
end
end
La figure 6.9 montre l’héritage multiple de cet exemple. L’héritage multiple est correct
dans ce cas parce que les deux fonctionnalités sont complètement différentes sans
aucune interaction indésirable. La méthode init initialise la liste enchaînée. La figure
n’a pas besoin d’initialisation. Comme dans toutes les figures, il y a une méthode move
et une méthode display. La méthode move(X Y) déplace toutes les figures de la
liste enchaînée. La méthode display affiche toutes les figures de la liste enchaînée.
Voyez-vous la beauté de cette conception ? Avec cette conception, une figure peut
être faite d’autres figures, dont certaines sont faites d’autres figures, et ainsi de suite
pour tout niveau de profondeur. La structure de l’héritage garantit que le déplacement
et l’affichage fonctionneront toujours correctement. C’est un bel exemple de polymorphisme : les classes CompositeFigure, Line et Circle comprennent tous les
messages move(X Y) et display.
Un exemple d’exécution
Nous pouvons exécuter cet exemple. D’abord, nous créons une fenêtre avec un champ
d’affichage graphique :
declare
W=250 H=150 Can
Wind={QTk.build
td(title:"Simple graphics package"
canvas(width:W height:H bg:white handle:Can))}
{Wind show}
Cela utilise l’outil QTk, qui est expliqué dans la section 3.7.2. Pour cet exemple,
nous introduisons un gadget de plus, un canevas (« canvas ») qui contient la surface
d’affichage des figures géométriques. Ensuite, nous définissons une figure composite
F1 qui contient un triangle et un cercle :
Précédent

- 313/370

Suivant