









Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Pratique java orienté objets. Cours et exercice
Typology: Exercises
1 / 16
This page cannot be seen from the preview
Don't miss anything!










Produit
Accessoire
Montre
Boitier
Bracelet
Fermoir
Vitre
MecanismeAnalogique
MecanismeDigital
MecanismeDouble
Mecanisme
class Montre extends Produit { }
// ========================================== class Montres { public static void main(String args[]) {} }
import java.util.ArrayList; // ...
// ========================================== class Accessoire { }
// ========================================== class Mecanisme { }
// ========================================== class Montre extends Produit { private Mecanisme coeur; private ArrayList
class Produit { private double prix; }
// ...
class Produit { private double valeur;
public double prix() { return valeur; } }
// ...
class Produit { private double valeur;
public virtual double prix() { return valeur; }
public String toString() { //.. } }
// ...
@Override public String toString() { return prix(); }
abstract class Produit {
//... }
abstract class Produit {
private final double valeur;
public Produit(double uneValeur) { valeur = uneValeur; } }
abstract class Produit {
private final double valeur;
public Produit(double uneValeur) { valeur = uneValeur; }
public Produit() { valeur = 0.0; }
public double prix() { return valeur; }
public String toString() { return Double.toString(prix()); }
}
abstract class Accessoire extends Produit { private final String nom;
public Accessoire(String unNom, double valeurDeBase) { super(valeurDeBase); nom = unNom; }
@Override public String toString() { String result = nom + " coûtant "; result += super.toString(); return result; } }
class Bracelet extends Accessoire {
public Bracelet(String unNom, double valeurDeBase) { super("bracelet " + unNom, valeurDeBase); } }
//------------------------------------------------------
class Fermoir extends Accessoire { public Fermoir(String unNom, double valeurDeBase) { super("fermoir " + unNom, valeurDeBase); } }
//...
class Montre extends Produit {
private Mecanisme coeur; private ArrayList
public Montre() { accessoires = new ArrayList
@Override public double prix() { // Au départ, le prix est le prix de base double prixFinal = super.prix() ;
for (Accessoire acc : accessoires) { prixFinal += acc.prix(); } return prixFinal; } //.. }
public void afficher () { System.out.print ("Une montre "); System.out.println("composée de :");
for (Accessoire acc : accessoires) { System.out.println(" * " + acc); } System.out.print ("==> Prix total : "); System.out.println(prix()); } //...
public static void main(String[] args) { Montre m = new Montre();
m.ajouter(new Bracelet("cuir" , 54.0)); m.ajouter(new Fermoir ("acier" , 12.5)); m.ajouter(new Boitier ("acier" , 36.6)); m.ajouter(new Vitre ("quartz", 44.8));
System.out.println('\n' + "Montre m :");
m.afficher(); }
class MecanismeAnalogique extends Mecanisme { private int date; public MecanismeAnalogique(double valeurDeBase, String uneHeure, int uneDate) { super (valeurDeBase, uneHeure); date = uneDate; } } class MecanismeDigital extends Mecanisme { private String reveil; public MecanismeDigital(double valeurDeBase, String uneHeure, String heureRev) { super(valeurDeBase, uneHeure); reveil = heureRev; } } // ...
class MecanismeDouble extends MecanismeAnalogique { private String reveil; public MecanismeDouble(double valeurDeBase, String uneHeure, int uneDate, String heureReveil) { super(valeurDeBase, uneHeure, uneDate); reveil = heureReveil; } }
class MecanismeDouble extends MecanismeAnalogique implements ReveilDigital {
public MecanismeDouble(double valeurDeBase, String uneHeure, int uneDate, String heureReveil) { super(valeurDeBase, uneHeure, uneDate); reveil = heureReveil; }
// gestion propre de la valeur par défaut de l'heure (super-classe) public MecanismeDouble(double valeurDeBase, int uneDate, String heureReveil) { super(valeurDeBase, uneDate); reveil = heureReveil; } }
public MecanismeDouble(double valeurDeBase, String uneHeure, int uneDate, String heureReveil) { super(valeurDeBase, uneHeure, uneDate); reveil = heureReveil; }
public // gestion propre de la valeur par défaut de l'heure (super-classe) MecanismeDouble(double valeurDeBase, int uneDate, String heureReveil) { super(valeurDeBase, uneDate); reveil = heureReveil; }
class Montre extends Produit { private Mecanisme coeur; private ArrayList
abstract class Mecanisme extends Produit { //... // Tous les mécanismes DOIVENT s'afficher comme ceci public final String toString() { String result = "mécanisme "; result += toStringType(); result += " (affichage : "; result += toStringCadran(); result += "), prix : "; result += super.toString(); return result; } // on veut offrir la version par défaut aux sous-classes et aux classes // du même paquetage. Par défaut, on affiche juste l'heure. protected String toStringCadran() { return heure; } // Un mécanisme, ici à ce niveau, est abstrait (= classe abstraite) protected abstract String toStringType(); }
class MecanismeDigital extends Mecanisme { //.. @Override protected String toStringType() { return "digital"; }
@Override protected String toStringCadran() { // On affiche l'heure (façon de base)... // ...et en plus l'heure de réveil. return super.toStringCadran() + ", " + toStringReveil(); }
protected String toStringReveil() { return " réveil " + reveil; } }
// test de l'affichage des mécanismes MecanismeAnalogique v1 = new MecanismeAnalogique(312.00, 20141212); MecanismeDigital v2 = new MecanismeDigital(32.00, "11:45", "7:00"); MecanismeDouble v3 = new MecanismeDouble(543.00, "8:20", 20140328, "6:30"); System.out.println(v1); System.out.println(v2); System.out.println(v3); // Test des montres Montre m = new Montre(new MecanismeDouble(468.00, "9:15", 20140401, "7:00")); m.ajouter(new Bracelet("cuir", 54.0)); m.ajouter(new Fermoir("acier", 12.5)); m.ajouter(new Boitier("acier", 36.60)); m.ajouter(new Vitre("quartz", 44.80)); System.out.println('\n' + "Montre m :"); m.afficher();
Montre maMontre = new Montre(...);
// votre ami veut la même montre // et dans ce cas on sait qu'il ne faut pas juste affecter // les références Montre montreToto = new Montre(maMontre);
class Montre extends Produit { private Mecanisme coeur; private ArrayList
public Montre(Montre autre) { super(autre); coeur = autre.coeur; accessoires = autre.accessoires; }
public Montre(Montre autre) { super(autre); coeur = new Mecanisme(autre.coeur); accessoires = new ArrayList
public static void main(String[] args) { // le reste comme avant
// Nous faisons une copie de la montre m Montre m2 = new Montre(m); System.out.println("Montre m2 :"); m2.afficher(); }