Il s’agit ici de modifier le codage de la classe Terrain de sorte à décrire un terrain non plus comme étant constitué de 2 rectangles mais de 3 rectangles et 2 cercles. Commençons par décrire la nouvelle classe, Cercle qui nous est nécessaire :
class Cercle { private double rayon; public Cercle (double rayon) { this.rayon = rayon; } public void setRayon (double rayon) { this.rayon = rayon; } public double getRayon () { return rayon; } public double calculerSurface () { return (Math.PI * rayon * rayon); } }
Il faut ensuite mettre à jour la classe Terrain en lui ajoutant les 3 attributs supplémentaires, en modifiant son constructeur et en modifier sa méthode de calcul de surface. On voit que cette dernière modification est complètement transparente pour l’utilisateur externe de la classe Terrain. Les méthodes par lesquelles il interagit avec cette classe (interface d’utilisation ou API) restent inchangées (à part le constructeur). La méthode calculerSurfaceTotale qui a été modifiée est en effet privée et la méthode d’affichage, publique parce qu’utile à l’utilisateur externe, n’a pas été modifiée.
class Terrain { private Rectangle r1; private Rectangle r2; private Rectangle r3; private Cercle c1; private Cercle c2; public Terrain (double l1, double h1, double l2, double h2, double l3, double h3, double rayon1, double rayon2) { // Construction des 3 rectangles definissant le terrain: r1 = new Rectangle(l1, h1); r2 = new Rectangle(l2, h2); r3 = new Rectangle(l3, h3); c1 = new Cercle(rayon1); c2 = new Cercle(rayon2); } private double calculerSurfaceTotale () { return r1.calculerSurface() + r2.calculerSurface() + r3.calculerSurface() + c1.calculerSurface() + c2.calculerSurface(); } public void afficherSurfaceTotale () { double surfaceTotale = calculerSurfaceTotale(); System.out.println("La surface totale est " + surfaceTotale); } }
Voici le code complet du programme modifié:
/* Ce programme calcule la surface d'un terrain composé de 3 rectangles et de 2 cercles. */ class Surfaces { public static void main (String[] args) { // Construction d'un terrain: Terrain t = new Terrain(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0); t.afficherSurfaceTotale(); } } class Terrain { private Rectangle r1; private Rectangle r2; private Rectangle r3; private Cercle c1; private Cercle c2; public Terrain (double l1, double h1, double l2, double h2, double l3, double h3, double rayon1, double rayon2) { // Construction des 3 rectangles définissant le terrain: r1 = new Rectangle(l1, h1); r2 = new Rectangle(l2, h2); r3 = new Rectangle(l3, h3); c1 = new Cercle(rayon1); c2 = new Cercle(rayon2); } private double calculerSurfaceTotale () { return r1.calculerSurface() + r2.calculerSurface() + r3.calculerSurface() + c1.calculerSurface() + c2.calculerSurface(); } public void afficherSurfaceTotale () { double surfaceTotale = calculerSurfaceTotale(); System.out.println("La surface totale est " + surfaceTotale); } } class Rectangle { private double largeur; private double hauteur; public Rectangle (double largeur, double hauteur) { this.largeur = largeur; this.hauteur = hauteur; } public void setLargeur (double largeur) { this.largeur = largeur; } public double getLargeur () { return largeur; } public void setHauteur (double hauteur) { this.hauteur = hauteur; } public double getHauteur () { return hauteur; } public double calculerSurface () { return (largeur * hauteur); } } class Cercle { private double rayon; public Cercle (double rayon) { this.rayon = rayon; } public void setRayon (double rayon) { this.rayon = rayon; } public double getRayon () { return rayon; } public double calculerSurface () { return (Math.PI * rayon * rayon); } }