/** * Définition du comportement des classes dessinables. * * @author Peter DAEHNE, HEG‐Genève * @version 2.2 */ public interface Dessinable { /* Définition du point du plan */ void setPoint (int x, int y); /* Définition de la couleur */ void setCouleur (java.awt.Color couleur); /* Dessin de l'objet */ void dessine (java.awt.Graphics g); } // Dessinable /** * Figure concrète dessinable: Cercle dessinable. * * @author Peter DAEHNE, HEG‐Genève * @version 2.2 */ import java.awt.*; public class CercleDessinable extends Cercle implements Dessinable { private Color couleur; /* Couleur */ private int x, y; /* Origine */ /* Constructeurs */ public CercleDessinable () {} public CercleDessinable (double r) {super(r);} public CercleDessinable (Color c, double r) {this(r); setCouleur(c);} public CercleDessinable (int x, int y, double r) {this(r); setPoint(x, y);} public CercleDessinable (Color c, int x, int y, double r) {this(x, y, r); setCouleur(c);} /* Interface Dessinable */ public void setPoint (int x, int y) {this.x = x; this.y = y;} public void setCouleur (Color couleur) {this.couleur = couleur;} public void dessine (Graphics g) {g.setColor(couleur); g.drawOval(x, y, (int)(rayon), (int)(rayon));} } // CercleDessinable /** * Figure concrète dessinable: Rectangle dessinable. * * @author Peter DAEHNE, HEG‐Genève * @version 2.2 */ import java.awt.*; public class RectangleDessinable extends Rectangle implements Dessinable { private Color couleur; /* Couleur */ private int x, y; /* Origine */ /* Constructeurs */ public RectangleDessinable () {} public RectangleDessinable (double l, double h) {super(l, h);} public RectangleDessinable (Color c, double l, double h) {this(l, h); setCouleur(c);} public RectangleDessinable (int x, int y, double l, double h) {this(l, h); setPoint(x, y);} public RectangleDessinable (Color c, int x, int y, double l, double h) {this(x, y, l, h); setCouleur(c);} /* Interface Dessinable */ public void setPoint (int x, int y) {this.x = x; this.y = y;} public void setCouleur (Color couleur) {this.couleur = couleur;} public void dessine (Graphics g) {g.setColor(couleur); g.drawRect(x, y, (int)(larg), (int)(haut));} } // RectangleDessinable /** * String personnalisé dessinable. * * @author Peter DAEHNE, HEG‐Genève * @version 2.2 */ import java.awt.*; public class MyStringDessinable extends MyString implements Dessinable { private Color couleur; /* Couleur */ private int x, y; /* Origine */ /* Constructeurs */ public MyStringDessinable () {} public MyStringDessinable (String s) {super(s);} public MyStringDessinable (Color c, String s) {this(s); setCouleur(c);} public MyStringDessinable (int x, int y, String s) {this(s); setPoint(x, y);} public MyStringDessinable (Color c, int x, int y, String s) {this(x, y, s); setCouleur(c);} /* Interface Dessinable */ public void setPoint (int x, int y) {this.x = x; this.y = y;} public void setCouleur (Color couleur) {this.couleur = couleur;} public void dessine (Graphics g) {g.setColor(couleur); g.drawString(toString(), x, y);} } // MyStringDessinable /** * Applet représentant des classes dessinables. * * @author Peter DAEHNE, HEG‐Genève * @version 2.2 */ public class Dessin extends java.applet.Applet { private Dessinable[] dessins = new Dessinable[7]; /* Dessinable est une "interface" */ /* 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 MyStringDessinable(java.awt.Color.red, 50, 50, "Hello World!"); dessins[5] = new RectangleDessinable(java.awt.Color.cyan, 250, 260, 40.0, 120.0); dessins[6] = new MyStringDessinable(java.awt.Color.black, 260, 420, "Autre string."); } // 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 calculant avec des Dessinables: * ‐ création d'un tableau de classes dessinables (les mêmes que dans Dessin.java) * ‐ calcul de l'aire totale des Figures * ‐ calcul de la somme des périmètres des Figures * ‐ calcule de la somme des longueurs des MyStrings * ‐ affichage des résultats * * @author Peter DAEHNE, HEG‐Genève * @version 2.2 */ public class Calculs { public static void main (String[] args) { Dessinable[] dessins = new Dessinable[7]; /* Dessinable est une "interface" */ 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 MyStringDessinable(java.awt.Color.red, 50, 50, "Hello World!"); dessins[5] = new RectangleDessinable(java.awt.Color.cyan, 250, 260, 40.0, 120.0); dessins[6] = new MyStringDessinable(java.awt.Color.black, 260, 420, "Autre string."); double sommeAire = 0.0; /* Calculs */ double sommePeri = 0.0; int sommeLong = 0; for (int i = 0; i < dessins.length; i++) { if (dessins[i] instanceof Figure) { sommeAire += ((Figure)dessins[i]).aire(); sommePeri += ((Figure)dessins[i]).perimetre(); } else { sommeLong += ((MyString)dessins[i]).length(); } } System.out.println("INTERFACE"); System.out.println("La somme des aires des figures est de " + sommeAire); System.out.println("La somme des périmètres des figures est de " + sommePeri); System.out.println("La somme des longueurs des chaînes est de " + sommeLong); } // main } // Calculs