L’héritage
CHAPITRE 12
256
2 Ne confondez pas l’appel par super du constructeur de la classe de base avec un appel
direct d’un constructeur (lequel, rappelons-le est interdit). Le premier se contente de
compléter l’instanciation d’un nouvel objet, alors que le second, s’il était autorisé,
appliquerait un constructeur à un objet déjà instancié.
Exercice 12.3 On dispose de la classe Point suivante (disposant cette fois d’un
constructeur)
classe Point
{ méthode Point (entier x, entier y) { abs := x ; ord := y }
méthode affCoord { écrire «Coordonnées : », x, « », y }
entier abs, ord
}
Écrire une classe PointNom, dérivée de Point, permettant de manipuler des points définis
par leurs coordonnées entières et un nom (caractère), et disposant des méthodes suivantes :
- constructeur pour définir les coordonnées et le nom,
- affCoordNom pour afficher les coordonnées et le nom.
Écrire un petit programme utilisant cette classe.
4 Comparaison entre héritage et composition
Nous venons de voir comment l’héritage permet de réutiliser une classe existante. Mais,
comme nous avons pu le montrer dans le chapitre précédent, il en va déjà ainsi avec la relation de composition. Ici, nous vous proposons d’examiner les différences entre ces deux possibilités en les appliquant à une même classe Cercle, définie de deux façons différentes, à
savoir :
• d’une part, par héritage d’une classe Point ;
• d’autre part, en utilisant un attribut de type Point, comme nous l’avons fait au paragraphe
1 du chapitre 11, page 229.
Nous supposerons donc que nous disposons de cette classe Point, dotée ici uniquement d’un
constructeur et d’une méthode déplace :
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 }
entier abs, ord
}
Créons une classe dérivée nommée Cercled, dotée uniquement d’un constructeur (qui
appelle celui de la classe de base pour initialiser les coordonnées du centre) :
classe Cercled dériveDe Point
{ méthode Cercled (entier x, entier y, réel r)
{ base (x, y)
rayon := r
}
réel rayon
}
Précédent

- 279/370

Suivant