From 9a6ddad732b505c2de32844b8b9551bd7dcdc8b9 Mon Sep 17 00:00:00 2001 From: badrr <badr.radellah@etu.univ-amu.fr> Date: Fri, 20 Sep 2024 10:49:32 +0200 Subject: [PATCH] Formula TP2 --- src/main/java/formula/Product.java | 39 +++++---------------- src/main/java/formula/Sum.java | 39 +++++---------------- src/main/java/formula/VariadicOperator.java | 39 +++++++++++++++++++++ 3 files changed, 57 insertions(+), 60 deletions(-) create mode 100644 src/main/java/formula/VariadicOperator.java diff --git a/src/main/java/formula/Product.java b/src/main/java/formula/Product.java index 65ddb82..94ae511 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 8e6b8ff..3601740 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 0000000..640dea8 --- /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; + } +} + -- GitLab