import java.util.*; /** Fichier Abstraite.java * * classe abstraite FigureGeo * / \ * classe concrète Cercle classe abstraite Parallelogramme * \ * classe concrète Rectangle * * Préparé par LVN pour IFT 1170 */ // Cette classe est abstraite car elle contient 2 méthodes abstraites abstract class FigureGeo { public abstract double perimetre(); // ne sait pas encore comment le calculer public abstract double surface(); // ne sait pas encore non plus comment la calculer public String toString(){ return String.format("\npérimètre : %7.2f\nsurface : %7.2f\n", perimetre(),surface()); } } /* Cette classe est CONCRÈTE car toutes les méthodes sont implémentées (réalisables) */ class Cercle extends FigureGeo { private double rayon; public Cercle(double rayon) { this.rayon = rayon; } public double perimetre() { return 2 * Math.PI * rayon; } public double surface() { return Math.PI * rayon * rayon; } public String toString() { return "Cercle de rayon : " + rayon + super.toString(); } } /* Cette classe est encore abstraite car on ne sait pas encore comment calculer la surface. */ abstract class Parallelogramme extends FigureGeo { protected double cote1, cote2; // on a quand même le droit d'avoir de constructeur public Parallelogramme(double cote1, double cote2) { this.cote1 = cote1; this.cote2 = cote2; } // cette méthode est "concrète" ici: public double perimetre() { return 2 * (cote1+cote2); } public String toString() { return "Les 2 cotes : " + cote1 + ", " + cote2 + "\n" + super.toString(); } } /* Cette classe est CONCRÈTE car toutes les méthodes sont implémentées (réalisables) */ class Rectangle extends Parallelogramme { public Rectangle(double longueur, double largeur) { super(longueur, largeur); } public Rectangle(double cote) { this(cote, cote); } public double surface() { return cote1*cote2; } } public class Abstraite { static void afficher(Vector v, String message) { System.out.println("Contenu du vecteur de " + v.size() + " éléments " + message); for (int i = 0; i < v.size() ; i++) System.out.println(i + ")\t" + v.get(i)); System.out.println(); } static void demoVecteur() { Vector v = new Vector(); v.add( new Cercle(12.6)); v.add( new Rectangle(8.4, 2.6) ); v.add( new Rectangle(5.2) ); v.add( new Cercle(2.3) ); v.add( new Rectangle(10.7, 8.3) ); afficher(v, "apres la création"); // supprimer le 2ieme et le dernier élément du vecteur v.remove(1); v.remove(v.size()-1); afficher(v, "après la suppression de 2 éléments"); } public static void main (String[] args) { Cercle c = new Cercle(10.0); System.out.println(c); Rectangle r = new Rectangle(6.8, 3.2); System.out.println("Infos du rectangle r :\n" + r); /* essayer avec : Parallelogramme p = new Parallelogramme(3.1, 8.2); Parallelogramme is abstract; cannot be instantiated */ demoVecteur(); } } /* Exécution: --------------------Configuration: -------------------- Cercle de rayon : 10.0 périmètre : 62,83 surface : 314,16 Infos du rectangle r : Les 2 cotes : 6.8, 3.2 périmètre : 20,00 surface : 21,76 Contenu du vecteur de 5 éléments apres la création 0) Cercle de rayon : 12.6 périmètre : 79,17 surface : 498,76 1) Les 2 cotes : 8.4, 2.6 périmètre : 22,00 surface : 21,84 2) Les 2 cotes : 5.2, 5.2 périmètre : 20,80 surface : 27,04 3) Cercle de rayon : 2.3 périmètre : 14,45 surface : 16,62 4) Les 2 cotes : 10.7, 8.3 périmètre : 38,00 surface : 88,81 Contenu du vecteur de 3 éléments après la suppression de 2 éléments 0) Cercle de rayon : 12.6 périmètre : 79,17 surface : 498,76 1) Les 2 cotes : 5.2, 5.2 périmètre : 20,80 surface : 27,04 2) Cercle de rayon : 2.3 périmètre : 14,45 surface : 16,62 Process completed. */