diff --git a/src/main/java/formula/Product.java b/src/main/java/formula/Product.java
index e3b9498682b968f638db83909e9631a9e9d6941f..65ddb825fce591c2e296507d52683aa4284c81f5 100644
--- a/src/main/java/formula/Product.java
+++ b/src/main/java/formula/Product.java
@@ -3,17 +3,26 @@ package formula;
 public class Product implements Formula {
     private Formula[] formulas;
 
-    // Constructeur prenant un tableau de formules
     public Product(Formula... formulas) {
         this.formulas = formulas;
     }
 
+    // Retourne la valeur initiale pour le produit (1)
+    public double initialValue() {
+        return 1;
+    }
+
+    // Cumul des valeurs pour le produit (multiplication)
+    public double cumulativeValue(double accumulator, double value) {
+        return accumulator * value;
+    }
+
     @Override
     public String asString() {
         StringBuilder sb = new StringBuilder("(");
         for (int i = 0; i < formulas.length; i++) {
             sb.append(formulas[i].asString());
-            if (i < formulas.length - 1) sb.append("*");  // Ajouter un "*" entre les formules
+            if (i < formulas.length - 1) sb.append(symbol());
         }
         sb.append(")");
         return sb.toString();
@@ -21,10 +30,16 @@ public class Product implements Formula {
 
     @Override
     public double asValue() {
-        double product = 1;
+        double result = initialValue();  // Initialise avec la valeur de départ (1 pour Product)
         for (Formula formula : formulas) {
-            product *= formula.asValue();
+            result = cumulativeValue(result, formula.asValue());  // Multiplie chaque valeur
         }
-        return product;
+        return result;
+    }
+
+    // Méthode symbol() comme déjà définie
+    public String symbol() {
+        return "*";
     }
 }
+
diff --git a/src/main/java/formula/Sum.java b/src/main/java/formula/Sum.java
index 32dc2a991fef164fece6f1a5dccd51c30040300f..8e6b8ff4af77fbfaf0205a6e21e5c10676a66ffd 100644
--- a/src/main/java/formula/Sum.java
+++ b/src/main/java/formula/Sum.java
@@ -3,17 +3,26 @@ package formula;
 public class Sum implements Formula {
     private Formula[] formulas;
 
-    // Constructeur prenant un tableau de formules
     public Sum(Formula... formulas) {
         this.formulas = formulas;
     }
 
+    // Retourne la valeur initiale pour la somme (0)
+    public double initialValue() {
+        return 0;
+    }
+
+    // Cumul des valeurs pour la somme (addition)
+    public double cumulativeValue(double accumulator, double value) {
+        return accumulator + value;
+    }
+
     @Override
     public String asString() {
         StringBuilder sb = new StringBuilder("(");
         for (int i = 0; i < formulas.length; i++) {
             sb.append(formulas[i].asString());
-            if (i < formulas.length - 1) sb.append("+");  // Ajouter un "+" entre les formules
+            if (i < formulas.length - 1) sb.append(symbol());
         }
         sb.append(")");
         return sb.toString();
@@ -21,10 +30,15 @@ public class Sum implements Formula {
 
     @Override
     public double asValue() {
-        double sum = 0;
+        double result = initialValue();  // Initialise avec la valeur de départ (0 pour Sum)
         for (Formula formula : formulas) {
-            sum += formula.asValue();
+            result = cumulativeValue(result, formula.asValue());  // Ajoute chaque valeur
         }
-        return sum;
+        return result;
+    }
+
+    // Méthode symbol() comme déjà définie
+    public String symbol() {
+        return "+";
     }
 }