Exercice : Modéliser une boutique en ligne
- Créez une classe abstraite « Produit » qui aura les propriétés suivantes : nom (String), prix (double) et description (String).
- Créez une interface « Vendable » qui définit une méthode vendre().
- Créez une classe « Livre » qui hérite de « Produit » et implémente l’interface « Vendable ». Ajoutez une propriété supplémentaire « auteur » (String) à la classe « Livre ».
- Créez une classe « CD » qui hérite de « Produit » et implémente l’interface « Vendable ». Ajoutez une propriété supplémentaire « artiste » (String) à la classe « CD ».
- Créez une classe « Boutique » qui aura les propriétés suivantes : nom (String) et une liste de produits (ArrayList<Produit>). Cette classe devra implémenter la méthode pour ajouter un produit à la liste et pour afficher les informations de tous les produits dans la liste.
- Créez des objets « Livre » et « CD », puis ajoutez-les à une instance de « Boutique ».
- Testez votre implémentation en appelant la méthode pour afficher les informations des produits dans la boutique et en appelant la méthode vendre() pour un livre et un CD.
Détails sur les attributs et les méthodes de chaque classe :
Classe abstraite « Produit » :
- Attributs :
- nom (String)
- prix (double)
- description (String)
- Méthodes :
- Un constructeur qui prend en entrée les valeurs pour les attributs.
- Des getters et setters pour les attributs.
Interface « Vendable » :
- Méthodes :
- vendre() – une méthode vide qui sera définie dans les classes qui implémentent cette interface.
Classe « Livre » :
- Attributs :
- nom (String) – hérité de la classe « Produit »
- prix (double) – hérité de la classe « Produit »
- description (String) – hérité de la classe « Produit »
- auteur (String)
- Méthodes :
- Un constructeur qui prend en entrée les valeurs pour les attributs « nom », « prix », « description » et « auteur ».
- Les méthodes héritées des getters et setters pour les attributs de la classe « Produit ».
- La méthode vendre() – implémentée à partir de l’interface « Vendable ».
Classe « CD » :
- Attributs :
- nom (String) – hérité de la classe « Produit »
- prix (double) – hérité de la classe « Produit »
- description (String) – hérité de la classe « Produit »
- artiste (String)
- Méthodes :
- Un constructeur qui prend en entrée les valeurs pour les attributs « nom », « prix », « description » et « artiste ».
- Les méthodes héritées des getters et setters pour les attributs de la classe « Produit ».
- La méthode vendre() – implémentée à partir de l’interface « Vendable ».
Classe « Boutique » :
- Attributs :
- nom (String)
- produits (ArrayList<Produit>)
- Méthodes :
- Un constructeur qui prend en entrée la valeur pour l’attribut « nom ».
- Un méthode pour ajouter un produit à la liste « produits ».
- Une méthode pour afficher les informations de tous les produits dans la liste « produits ».
Note : les noms des méthodes et des variables peuvent être modifiés pour mieux refléter leur fonctionnalité.
Solution
abstract class Produit {
private String nom;
private double prix;
private String description;
public Produit(String nom, double prix, String description) {
this.nom = nom;
this.prix = prix;
this.description = description;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public double getPrix() {
return prix;
}
public void setPrix(double prix) {
this.prix = prix;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
interface Vendable {
void vendre();
}
class Livre extends Produit implements Vendable {
private String auteur;
public Livre(String nom, double prix, String description, String auteur) {
super(nom, prix, description);
this.auteur = auteur;
}
public String getAuteur() {
return auteur;
}
public void setAuteur(String auteur) {
this.auteur = auteur;
}
@Override
public void vendre() {
System.out.println("Vente du Livre : " + super.getNom() + " de l'artiste " + this.getAuteur() + " pour un prix de " + super.getPrix() + "DH");
// Autres opérations nécessaires pour la vente, telles que la modification du stock, la mise à jour des statistiques, etc.
}
}
class CD extends Produit implements Vendable {
private String artiste;
public CD(String nom, double prix, String description, String artiste) {
super(nom, prix, description);
this.artiste = artiste;
}
public String getArtiste() {
return artiste;
}
public void setArtiste(String artiste) {
this.artiste = artiste;
}
@Override
public void vendre() {
System.out.println("Vente du CD : " + super.getNom() + " de l'artiste " + this.getArtiste() + " pour un prix de " + super.getPrix() + "DH");
// Autres opérations nécessaires pour la vente, telles que la modification du stock, la mise à jour des statistiques, etc.
}
}
class Boutique {
private String nom;
private ArrayList<Produit> produits;
public Boutique(String nom) {
this.nom = nom;
this.produits = new ArrayList<>();
}
public void ajouterProduit(Produit produit) {
produits.add(produit);
}
public void afficherProduits() {
for (Produit produit : produits) {
System.out.println("Nom : " + produit.getNom());
System.out.println("Prix : " + produit.getPrix());
System.out.println("Description : " + produit.getDescription());
}
}
}
[collapse]