diff --git a/.classpath b/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..20a8b72ab4c60e9256a641fbfba9dee3204732a3 --- /dev/null +++ b/.classpath @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-22"> + <attributes> + <attribute name="module" value="true"/> + </attributes> + </classpathentry> + <classpathentry kind="src" path="src"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/.project b/.project new file mode 100644 index 0000000000000000000000000000000000000000..2f709b4ac6fbb9349f3b4b01782eb842e6dfefae --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>VenteEnLigne</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000000000000000000000000000000000000..99f26c0203a7844de00dbfc56e6a35d8ed3c022c --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/<project>=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..6e5f87427bf8c783b2084d4b2b0219157ac01112 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,14 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=22 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=22 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=22 diff --git a/Diagramme De Classe.png b/Diagramme De Classe.png new file mode 100644 index 0000000000000000000000000000000000000000..557b123dacdd4bd4583549f653a498796a8afaa6 Binary files /dev/null and b/Diagramme De Classe.png differ diff --git "a/Diagramme de S\303\251quence.png" "b/Diagramme de S\303\251quence.png" new file mode 100644 index 0000000000000000000000000000000000000000..c1f640a87e8bb34b7e8f7be68f38769daf934e92 Binary files /dev/null and "b/Diagramme de S\303\251quence.png" differ diff --git a/bin/com/Vente/Disque.class b/bin/com/Vente/Disque.class new file mode 100644 index 0000000000000000000000000000000000000000..58d2a8a7db6316b6cc9944a32caebefc964f7351 Binary files /dev/null and b/bin/com/Vente/Disque.class differ diff --git a/bin/com/Vente/Main.class b/bin/com/Vente/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..12f5e06638340d138109742f0831779299ce31ff Binary files /dev/null and b/bin/com/Vente/Main.class differ diff --git a/bin/com/Vente/Nourriture.class b/bin/com/Vente/Nourriture.class new file mode 100644 index 0000000000000000000000000000000000000000..3bfc9b848208d94284d92240d0aae45f8a9ed52f Binary files /dev/null and b/bin/com/Vente/Nourriture.class differ diff --git a/bin/com/Vente/Panier.class b/bin/com/Vente/Panier.class new file mode 100644 index 0000000000000000000000000000000000000000..abdf6f0fbb8bc33646fee6fd1daf53542a5a245f Binary files /dev/null and b/bin/com/Vente/Panier.class differ diff --git a/bin/com/Vente/Produit.class b/bin/com/Vente/Produit.class new file mode 100644 index 0000000000000000000000000000000000000000..c0b7153fd91eca103b57fa51158bdffff35b2f21 Binary files /dev/null and b/bin/com/Vente/Produit.class differ diff --git a/bin/com/Vente/Utilisateur.class b/bin/com/Vente/Utilisateur.class new file mode 100644 index 0000000000000000000000000000000000000000..3d5e1b2040dc6acd09080adb355dfdf5600ca44d Binary files /dev/null and b/bin/com/Vente/Utilisateur.class differ diff --git a/bin/com/Vente/Vendable.class b/bin/com/Vente/Vendable.class new file mode 100644 index 0000000000000000000000000000000000000000..cd3e941bf39d922d397656e1b6cec630950e990a Binary files /dev/null and b/bin/com/Vente/Vendable.class differ diff --git a/bin/module-info.class b/bin/module-info.class new file mode 100644 index 0000000000000000000000000000000000000000..11bf3c172dbbdc3c00cb21f8d843bc10dc8c4941 Binary files /dev/null and b/bin/module-info.class differ diff --git a/src/com/Vente/Disque.java b/src/com/Vente/Disque.java new file mode 100644 index 0000000000000000000000000000000000000000..a2c39fd3fff6acc9bc69a51a1f7bc489c8f9aad7 --- /dev/null +++ b/src/com/Vente/Disque.java @@ -0,0 +1,22 @@ +package com.Vente; + +/** + * Classe Disque : représente un CD ou un vinyle vendable. + * Implémente l'interface Vendable et définit le prix unitaire d'un disque. + */ +public class Disque implements Vendable { + private String titre; + private String artiste; + private double prixUnitaire; + + public Disque(String titre, String artiste, double prixUnitaire) { + this.titre = titre; + this.artiste = artiste; + this.prixUnitaire = prixUnitaire; + } + + @Override + public double getPrixUnitaire() { + return prixUnitaire; + } +} \ No newline at end of file diff --git a/src/com/Vente/Main.java b/src/com/Vente/Main.java new file mode 100644 index 0000000000000000000000000000000000000000..c42d3a9ff244f64787fd089f7e08680410646c0b --- /dev/null +++ b/src/com/Vente/Main.java @@ -0,0 +1,20 @@ +package com.Vente; + +import java.time.LocalDate; + +/** + * Classe principale pour tester l'application. + */ +public class Main { + public static void main(String[] args) { + Panier panier = new Panier(); + + Disque disque1 = new Disque("Album1", "Artiste1", 3); + Nourriture pomme = new Nourriture("Pomme", LocalDate.of(2025, 3, 13), 5); + + panier.add(2, disque1); + panier.add(1, pomme); + + System.out.println("Total du panier : " + panier.calculerTotal() + " €"); + } +} \ No newline at end of file diff --git a/src/com/Vente/Nourriture.java b/src/com/Vente/Nourriture.java new file mode 100644 index 0000000000000000000000000000000000000000..39fcb8c8aafeb8be76f994aeebe76ec1fb515c29 --- /dev/null +++ b/src/com/Vente/Nourriture.java @@ -0,0 +1,24 @@ +package com.Vente; + +import java.time.LocalDate; + +/** + * Classe Nourriture : représente un aliment vendable avec une date d'expiration. + * Implémente Vendable, ce qui signifie qu'un aliment peut être ajouté à un panier. + */ +public class Nourriture implements Vendable { + private String nom; + private LocalDate dateExpiration; + private double prixUnitaire; + + public Nourriture(String nom, LocalDate dateExpiration, double prixUnitaire) { + this.nom = nom; + this.dateExpiration = dateExpiration; + this.prixUnitaire = prixUnitaire; + } + + @Override + public double getPrixUnitaire() { + return prixUnitaire; + } +} \ No newline at end of file diff --git a/src/com/Vente/Panier.java b/src/com/Vente/Panier.java new file mode 100644 index 0000000000000000000000000000000000000000..308463202a24ef3fdf214a0797d55a7da5eb59b4 --- /dev/null +++ b/src/com/Vente/Panier.java @@ -0,0 +1,49 @@ +package com.Vente; + +import java.util.ArrayList; +import java.util.List; + +/** + * Classe Panier : représente un panier contenant plusieurs produits. + * Vérifie l'invariant : la liste de produits ne doit jamais être null. + */ +public class Panier { + private List<Produit> produits; + + public Panier() { + this.produits = new ArrayList<>(); + assert checkInvariant() : "Invariant violé : La liste de produits ne doit jamais être null."; + } + + /** + * Ajoute un produit au panier après vérification de la validité des paramètres. + * @param quantite Nombre d'unités à ajouter (> 0). + * @param chose Objet vendable (ex : Disque, Nourriture). + */ + public void add(int quantite, Vendable chose) { + if (quantite <= 0) { + throw new IllegalArgumentException("Quantité invalide."); + } + produits.add(new Produit(chose, quantite)); + + assert checkInvariant() : "Invariant violé : Panier invalide après ajout."; + } + + /** + * Calcule le prix total du panier en additionnant les prix de tous les produits. + * @return Prix total du panier. + */ + public double calculerTotal() { + double total = produits.stream().mapToDouble(Produit::getPrixTotal).sum(); + assert total >= 0 : "Postcondition violée : Le prix total ne peut pas être négatif."; + return total; + } + + /** + * Vérifie que l'invariant du panier est respecté. + * @return true si la liste de produits est valide. + */ + private boolean checkInvariant() { + return produits != null && produits.stream().allMatch(p -> p.getPrixTotal() >= 0); + } +} diff --git a/src/com/Vente/Produit.java b/src/com/Vente/Produit.java new file mode 100644 index 0000000000000000000000000000000000000000..8994f8bd1f0362a37e9ed841994b8f0878df7936 --- /dev/null +++ b/src/com/Vente/Produit.java @@ -0,0 +1,37 @@ +package com.Vente; + +/** + * Classe Produit<T> : un produit est composé d'une chose vendable et d'une quantité. + * Utilise la généricité pour permettre la compatibilité avec n'importe quel type de Vendable. + */ +public class Produit { + private Vendable chose; + private int quantite; + + public Produit(Vendable chose, int quantite) { + if (quantite <= 0) { + throw new IllegalArgumentException("La quantité doit être strictement positive."); + } + this.chose = chose; + this.quantite = quantite; + + assert checkInvariant() : "Invariant violé : Produit invalide."; + } + + /** + * Retourne le prix total du produit (quantité * prix unitaire). + */ + public double getPrixTotal() { + double prixTotal = quantite * chose.getPrixUnitaire(); + assert prixTotal >= 0 : "Postcondition violée : Prix total négatif."; + return prixTotal; + } + + /** + * Vérifie l'invariant de la classe Produit. + * La quantité doit toujours être > 0. + */ + private boolean checkInvariant() { + return quantite > 0; + } +} \ No newline at end of file diff --git a/src/com/Vente/Utilisateur.java b/src/com/Vente/Utilisateur.java new file mode 100644 index 0000000000000000000000000000000000000000..4c7ea626d4788d0290321c3d3737f8d90ccbbe3d --- /dev/null +++ b/src/com/Vente/Utilisateur.java @@ -0,0 +1,29 @@ +package com.Vente; + +/** + * Classe Utilisateur : représente un utilisateur qui possède un panier et peut calculer le total de ses achats. + */ +public class Utilisateur { + private Panier panier; + + public Utilisateur() { + this.panier = new Panier(); + } + + /** + * Retourne le prix total des achats de l'utilisateur en appelant calculerTotal() sur son panier. + * @return Prix total du panier + */ + public double calculerTotalAchats() { + return panier.calculerTotal(); + } + + /** + * Ajoute un produit au panier de l'utilisateur. + * @param quantite Quantité à ajouter + * @param chose Objet vendable + */ + public void ajouterProduitAuPanier(int quantite, Vendable chose) { + panier.add(quantite, chose); + } +} diff --git a/src/com/Vente/Vendable.java b/src/com/Vente/Vendable.java new file mode 100644 index 0000000000000000000000000000000000000000..ba10dca2f7b58db35007149f8393112204c37ced --- /dev/null +++ b/src/com/Vente/Vendable.java @@ -0,0 +1,11 @@ +package com.Vente; + + +/** + * Interface Vendable : définit un contrat pour les objets qui peuvent être vendus. + * Une interface ne contient que des méthodes abstraites par défaut. + * Utilisée pour garantir que tous les objets vendables implémentent getPrixUnitaire(). + */ +public interface Vendable { + double getPrixUnitaire(); +} diff --git a/src/module-info.java b/src/module-info.java new file mode 100644 index 0000000000000000000000000000000000000000..7a1c411333392f85e61e8806eb733a25ad559ff6 --- /dev/null +++ b/src/module-info.java @@ -0,0 +1,8 @@ +/** + * + */ +/** + * + */ +module VenteEnLigne { +} \ No newline at end of file