/** * Classe semi‐abstraite représentant les figures géométriques dessinables. * La figure à dessiner est enveloppée dans cette classe (wrapper class). * Les méthodes aire() et perimetre() sont implantées par délégation. * * @author Peter DAEHNE, HEG‐Genève * @version 2.2 */ public abstract class FigureDessinable { protected Figure figure; /* La figure en question */ protected java.awt.Color couleur; /* Couleur */ protected int x, y; /* Origine */ /* Constructeur */ protected FigureDessinable (Figure figure) {this.figure = figure;} /* Retourne la surface de la figure */ public double aire () {return figure.aire();} /* Retourne le périmètre de la figure */ public double perimetre () {return figure.perimetre();} /* Dessin de la figure */ public abstract void dessine (java.awt.Graphics g); } // FigureDessinable /** * Figure concrète: Cercle dessinable. * * @author Peter DAEHNE, HEG‐Genève * @version 2.2 */ public class CercleDessinable extends FigureDessinable { /* Constructeurs */ public CercleDessinable () {super(new Cercle());} public CercleDessinable (double rayon) {super(new Cercle(rayon));} public CercleDessinable (java.awt.Color c, double rayon) {this(rayon); couleur = c;} public CercleDessinable (int x, int y, double rayon) {this(rayon); this.x = x; this.y = y;} public CercleDessinable (java.awt.Color c, int x, int y, double rayon) {this(x, y, rayon); couleur = c;} /* Dessin du cercle */ public void dessine (java.awt.Graphics g) { g.setColor(couleur); g.drawOval(x, y, (int)(((Cercle)figure).rayon), (int)(((Cercle)figure).rayon)); } // dessine } // CercleDessinable /** * Figure concrète: Rectangle dessinable. * * @author Peter DAEHNE, HEG‐Genève * @version 2.2 */ public class RectangleDessinable extends FigureDessinable { /* Constructeurs */ public RectangleDessinable () {super(new Rectangle());} public RectangleDessinable (double larg, double haut) {super(new Rectangle(larg, haut));} public RectangleDessinable (java.awt.Color c, double larg, double haut) {this(larg, haut); couleur = c;} public RectangleDessinable (int x, int y, double larg, double haut) {this(larg, haut); this.x = x; this.y = y;} public RectangleDessinable (java.awt.Color c, int x, int y, double larg, double haut) {this(x, y, larg, haut); couleur = c;} /* Dessin du rectangle */ public void dessine (java.awt.Graphics g) { g.setColor(couleur); g.drawRect(x, y, (int)(((Rectangle)figure).larg), (int)(((Rectangle)figure).haut)); } // dessine } // RectangleDessinable /** * Applet servant à représenter des figures dessinables. * * @author Peter DAEHNE, HEG‐Genève * @version 2.2 */ public class Dessin extends java.applet.Applet { private FigureDessinable[] dessins = new FigureDessinable[5]; /* FigureDessinable est une "abstract class" */ /* Méthode appelée à l'initialisation de l'Applet */ public void init () { dessins[0] = new CercleDessinable(java.awt.Color.red, 100, 100, 60.0); dessins[1] = new RectangleDessinable(java.awt.Color.blue, 200, 200, 100.0, 50.0); dessins[2] = new CercleDessinable(java.awt.Color.green, 120, 100, 70.0); dessins[3] = new CercleDessinable(java.awt.Color.yellow, 140, 100, 80.0); dessins[4] = new RectangleDessinable(java.awt.Color.cyan, 250, 260, 40.0, 120.0); } // init /* Méthode effectuant effectivement l'affichage */ public void paint (java.awt.Graphics g) { for (int i = 0; i < dessins.length; i++) {dessins[i].dessine(g);} } // paint } // Dessin /** * Classe principale testant des figures: * ‐ création d'un tableau de classes dessinables (les mêmes que dans Dessin.java) * ‐ calcul de la somme des aires des Figures * ‐ calcul de la somme des périmètres des Figures * ‐ affichage des résultats * * @author Peter DAEHNE, HEG‐Genève * @version 2.2 */ public class Calculs { public static void main (String[] args) { FigureDessinable[] dessins = new FigureDessinable[5]; /* FigureDessinable est une "abstract class" */ dessins[0] = new CercleDessinable(java.awt.Color.red, 100, 100, 60.0); dessins[1] = new RectangleDessinable(java.awt.Color.blue, 200, 200, 100.0, 50.0); dessins[2] = new CercleDessinable(java.awt.Color.green, 120, 100, 70.0); dessins[3] = new CercleDessinable(java.awt.Color.yellow, 140, 100, 80.0); dessins[4] = new RectangleDessinable(java.awt.Color.cyan, 250, 260, 40.0, 120.0); double aireTot = 0.0; /* Calculs */ double sommePeri = 0.0; for (int i = 0; i < dessins.length; i++) { aireTot += dessins[i].aire(); sommePeri += dessins[i].perimetre(); } System.out.println("WRAPPER"); System.out.println("La somme des aires des figures est de " + aireTot); System.out.println("La somme des périmètres des figures est de " + sommePeri); } // main } // Calculs