diff --git a/src/main/java/formula/Product.java b/src/main/java/formula/Product.java index 65ddb825fce591c2e296507d52683aa4284c81f5..94ae51176d7e1a2a706787720c7d37d0e93f7aaf 100644 --- a/src/main/java/formula/Product.java +++ b/src/main/java/formula/Product.java @@ -1,45 +1,24 @@ package formula; -public class Product implements Formula { - private Formula[] formulas; +public class Product extends VariadicOperator { 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; + super(formulas); } @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(symbol()); - } - sb.append(")"); - return sb.toString(); + public String symbol() { + return "*"; } @Override - public double asValue() { - double result = initialValue(); // Initialise avec la valeur de départ (1 pour Product) - for (Formula formula : formulas) { - result = cumulativeValue(result, formula.asValue()); // Multiplie chaque valeur - } - return result; + public double initialValue() { + return 1; } - // Méthode symbol() comme déjà définie - public String symbol() { - return "*"; + @Override + public double cumulativeValue(double accumulator, double value) { + return accumulator * value; } } diff --git a/src/main/java/formula/Sum.java b/src/main/java/formula/Sum.java index 8e6b8ff4af77fbfaf0205a6e21e5c10676a66ffd..360174081c32d1bf3d72986d0e5d56de9e965321 100644 --- a/src/main/java/formula/Sum.java +++ b/src/main/java/formula/Sum.java @@ -1,44 +1,23 @@ package formula; -public class Sum implements Formula { - private Formula[] formulas; +public class Sum extends VariadicOperator { 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; + super(formulas); } @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(symbol()); - } - sb.append(")"); - return sb.toString(); + public String symbol() { + return "+"; } @Override - public double asValue() { - double result = initialValue(); // Initialise avec la valeur de départ (0 pour Sum) - for (Formula formula : formulas) { - result = cumulativeValue(result, formula.asValue()); // Ajoute chaque valeur - } - return result; + public double initialValue() { + return 0; } - // Méthode symbol() comme déjà définie - public String symbol() { - return "+"; + @Override + public double cumulativeValue(double accumulator, double value) { + return accumulator + value; } } diff --git a/src/main/java/formula/VariadicOperator.java b/src/main/java/formula/VariadicOperator.java new file mode 100644 index 0000000000000000000000000000000000000000..640dea85a836482635ee507dfb54e9cdfae634aa --- /dev/null +++ b/src/main/java/formula/VariadicOperator.java @@ -0,0 +1,39 @@ +package formula; + +public abstract class VariadicOperator implements Formula { + protected Formula[] formulas; + + public VariadicOperator(Formula... formulas) { + this.formulas = formulas; + } + + // Méthode abstraite pour le symbole + public abstract String symbol(); + + // Méthode abstraite pour la valeur initiale de l'opération + public abstract double initialValue(); + + // Méthode abstraite pour le cumul des valeurs + public abstract double cumulativeValue(double accumulator, double 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(symbol()); + } + sb.append(")"); + return sb.toString(); + } + + @Override + public double asValue() { + double result = initialValue(); + for (Formula formula : formulas) { + result = cumulativeValue(result, formula.asValue()); + } + return result; + } +} +