PDF du code

publicité
/**
* 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
Téléchargement