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