“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 295 — #305
i
i
i
i
i
i
i
i
6.4 La programmation avec l’héritage
295
Les figures géométriques
Nous définissons d’abord la classe Figure pour modéliser les figures géométriques,
avec les méthodes init (initialiser la figure), move(X Y) (déplacer la figure) et
display (afficher la figure) :
class Figure
meth otherwise(M)
raise undefinedMethod({Label M}) end
end
end
Figure est une classe abstraite ; toute tentative d’invoquer ces méthodes lèvera une
exception. La méthode otherwise a une sémantique particulière : elle est invoquée
avec le message M quand aucune autre méthode n’est trouvée pour M. Une classe
abstraite est une classe dans laquelle certaines méthodes ne sont pas définies. Pour
utiliser une classe abstraite, on définit une autre classe qui hérite de la classe abstraite
et qui ajoute les méthodes manquantes. Cela donne une classe concrète, c’est-à-dire
une classe qui définit toutes ses méthodes et qui peut donc être instanciée. Les figures
sont des instances des sous-classes de Figure. Par exemple, voici une classe Line
(ligne) :
class Line from Figure
attr canvas x1 y1 x2 y2
meth init(Can X1 Y1 X2 Y2)
canvas:=Can
x1:=X1 y1:=Y1
x2:=X2 y2:=Y2
end
meth move(X Y)
x1:=@x1+X y1:=@y1+Y
x2:=@x2+X y2:=@y2+Y
end
meth display
{@canvas create(line @x1 @y1 @x2 @y2)}
end
end
© Dunod – La photocopie non autorisée est un délit
i
i
i
i
i
i
i
i
6.4 La programmation avec l’héritage
295
Les figures géométriques
Nous définissons d’abord la classe Figure pour modéliser les figures géométriques,
avec les méthodes init (initialiser la figure), move(X Y) (déplacer la figure) et
display (afficher la figure) :
class Figure
meth otherwise(M)
raise undefinedMethod({Label M}) end
end
end
Figure est une classe abstraite ; toute tentative d’invoquer ces méthodes lèvera une
exception. La méthode otherwise a une sémantique particulière : elle est invoquée
avec le message M quand aucune autre méthode n’est trouvée pour M. Une classe
abstraite est une classe dans laquelle certaines méthodes ne sont pas définies. Pour
utiliser une classe abstraite, on définit une autre classe qui hérite de la classe abstraite
et qui ajoute les méthodes manquantes. Cela donne une classe concrète, c’est-à-dire
une classe qui définit toutes ses méthodes et qui peut donc être instanciée. Les figures
sont des instances des sous-classes de Figure. Par exemple, voici une classe Line
(ligne) :
class Line from Figure
attr canvas x1 y1 x2 y2
meth init(Can X1 Y1 X2 Y2)
canvas:=Can
x1:=X1 y1:=Y1
x2:=X2 y2:=Y2
end
meth move(X Y)
x1:=@x1+X y1:=@y1+Y
x2:=@x2+X y2:=@y2+Y
end
meth display
{@canvas create(line @x1 @y1 @x2 @y2)}
end
end
© Dunod – La photocopie non autorisée est un délit
