programmation Java (école d'ingénieur) · Chapitre 9 · Application directe du cours
Un carré est-il un rectangle ?
Héritage et polymorphisme · niveau 3 (difficile)
Énoncé
Une classe Rect possède les méthodes setLargeur, setHauteur et aire. On écrit class Carre extends Rect, dont les méthodes setLargeur et setHauteur modifient les deux côtés pour que le carré reste un carré.
- Une méthode
elargir(Rect r), écrite pour des rectangles, double la largeur deret s'attend à ce que l'aire double. Que se passe-t-il si on lui passe un carré ? - Qu'en conclure sur la relation « un carré est un rectangle » en programmation ? Proposer une conception qui évite le problème.
Corrigé
- On écrit
elargiren calculant l'aire attendue :
static void elargir(Rect r) { // écrite pour des rectangles
double attendue = 2 * r.aire(); // doubler la largeur double l'aire
r.setLargeur(r.getLargeur() * 2);
System.out.println("aire attendue " + attendue + ", obtenue " + r.aire());
}
Appelée sur new Rect(2, 3) puis sur new Carre(3) :
aire attendue 12.0, obtenue 12.0
aire attendue 18.0, obtenue 36.0
Pour le carré, setLargeur(6) a aussi changé la hauteur : l'aire a été multipliée par , et non par . La méthode elargir, juste pour tous les rectangles, devient fausse pour un carré.
- En géométrie, un carré est un rectangle ; mais un carré modifiable ne se comporte pas comme un rectangle modifiable : il ne tient pas la promesse « changer la largeur ne change pas la hauteur ». Un objet de la sous-classe doit pouvoir remplacer partout un objet de la super-classe (c'est le principe de substitution de Liskov). Solutions : rendre les formes immuables (sans
setLargeur;Carrepeut alors hériter deRectsans danger), ou faire deCarreetRectdeux sous-classes indépendantes deForme.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.