diff --git a/.idea/misc.xml b/.idea/misc.xml
index 6624aa5239bd87293312b297feabe77375fc86df..480dc8a7b94017006a3c6b6c36395e0fff6eaa41 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,9 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ExternalStorageConfigurationManager" enabled="true" />
   <component name="FrameworkDetectionExcludesConfiguration">
     <file type="web" url="file://$PROJECT_DIR$" />
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="corretto-16" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/out" />
   </component>
 </project>
\ No newline at end of file
diff --git a/src/main/java/Formule/Formula.java b/src/main/java/Formule/Formula.java
new file mode 100644
index 0000000000000000000000000000000000000000..79c3766a411b31f5854a99c2600cb4f139377636
--- /dev/null
+++ b/src/main/java/Formule/Formula.java
@@ -0,0 +1,7 @@
+package Formule;
+
+public interface Formula {
+    String asString();
+    double asValue();
+
+}
diff --git a/src/main/java/Formule/Operator.java b/src/main/java/Formule/Operator.java
new file mode 100644
index 0000000000000000000000000000000000000000..5c759b60a1dd24fd958a32885f2427dce9856b3b
--- /dev/null
+++ b/src/main/java/Formule/Operator.java
@@ -0,0 +1,8 @@
+package Formule;
+
+public interface Operator {
+    String Symbol();
+    double initialValue();
+
+    double cumulative(double acc, double value);
+}
diff --git a/src/main/java/Formule/Product.java b/src/main/java/Formule/Product.java
new file mode 100644
index 0000000000000000000000000000000000000000..f3f9e844b3580deb76d8e5f05fc5b0fd74f00e3d
--- /dev/null
+++ b/src/main/java/Formule/Product.java
@@ -0,0 +1,25 @@
+package Formule;
+
+public class Product implements Operator{
+    Formula[]formule;
+    public Product(Formula[]formule){
+        this.formule=formule;
+    }
+
+
+
+    @Override
+    public String Symbol() {
+        return "*";
+    }
+
+    @Override
+    public double initialValue() {
+        return 0;
+    }
+
+    @Override
+    public double cumulative(double acc, double value) {
+        return acc*value;
+    }
+}
diff --git a/src/main/java/Formule/ProductOperator.java b/src/main/java/Formule/ProductOperator.java
new file mode 100644
index 0000000000000000000000000000000000000000..c9ba7af07add3caa46a48a2a9cff948c9968f79c
--- /dev/null
+++ b/src/main/java/Formule/ProductOperator.java
@@ -0,0 +1,7 @@
+package Formule;
+
+public class ProductOperator extends  VariadicOperator{
+    public ProductOperator(Operator operator, Formula[] formulas) {
+        super(operator, formulas);
+    }
+}
diff --git a/src/main/java/Formule/Sum.java b/src/main/java/Formule/Sum.java
new file mode 100644
index 0000000000000000000000000000000000000000..8a51d953aebfc0fa8e3d1703732c5314b182e0a1
--- /dev/null
+++ b/src/main/java/Formule/Sum.java
@@ -0,0 +1,25 @@
+package Formule;
+
+public class Sum implements Operator{
+    Formula[]formule;
+    public Sum(){
+        this.formule=formule;
+    }
+
+
+    @Override
+    public String Symbol() {
+        return "+";
+    }
+
+
+    @Override
+    public double initialValue() {
+        return 0;
+    }
+
+    @Override
+    public double cumulative(double acc, double value) {
+        return acc + value;
+    }
+}
diff --git a/src/main/java/Formule/SumOperator.java b/src/main/java/Formule/SumOperator.java
new file mode 100644
index 0000000000000000000000000000000000000000..675799439f02b3510ea5fbf12e9eee78e875074e
--- /dev/null
+++ b/src/main/java/Formule/SumOperator.java
@@ -0,0 +1,7 @@
+package Formule;
+
+public class SumOperator extends VariadicOperator{
+    public SumOperator(Formula... formulas) {
+        super(new Sum(), formulas);
+    }
+}
diff --git a/src/main/java/Formule/Test.java b/src/main/java/Formule/Test.java
new file mode 100644
index 0000000000000000000000000000000000000000..e0a6f1b696b34335d6311f009cbe0af327a0fb0d
--- /dev/null
+++ b/src/main/java/Formule/Test.java
@@ -0,0 +1,15 @@
+package Formule;
+
+public class Test {
+    public static void main(String[] args) {
+        Variable variable1 = new Variable("x", 2);
+        Variable variable2 = new Variable("y", 2);
+        Variable variable3 = new Variable("z", 4);
+
+
+        Formula sum = new SumOperator(variable1, variable2, variable3);
+
+        System.out.println(sum.asString());
+        System.out.println(sum.asValue());
+    }
+}
diff --git a/src/main/java/Formule/Variable.java b/src/main/java/Formule/Variable.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a1aae8582d5f9886c47648bfb83ec578c68656a
--- /dev/null
+++ b/src/main/java/Formule/Variable.java
@@ -0,0 +1,20 @@
+package Formule;
+
+public class Variable implements Formula{
+    private String name;
+    private double value ;
+
+    public Variable(String name, double value){
+        this.name=name;
+        this.value=value;
+    }
+    @Override
+    public String asString() {
+        return this.name;
+    }
+
+    @Override
+    public double asValue() {
+        return this.value;
+    }
+}
diff --git a/src/main/java/Formule/VariadicOperator.java b/src/main/java/Formule/VariadicOperator.java
new file mode 100644
index 0000000000000000000000000000000000000000..d7af11024dfcf21bfdc7d9f84d4c0df3e3c2737f
--- /dev/null
+++ b/src/main/java/Formule/VariadicOperator.java
@@ -0,0 +1,29 @@
+package Formule;
+
+public abstract class VariadicOperator implements Formula{
+    private Formula[]formulas;
+    private Operator operator ;
+    public VariadicOperator(Operator operator,Formula[] formulas){
+
+        this.formulas=formulas;
+        this.operator=operator;
+    }
+    public  String asString(){
+        String result="";
+        for(Formula a:formulas){
+            result+=a.asString();
+            result+= operator.Symbol();
+        }
+        return result;
+    }
+    public  double asValue(){
+        double valeur =0;
+        for(Formula a:formulas){
+            valeur+=operator.cumulative(operator.initialValue(), a.asValue());
+
+        }
+        return valeur;
+
+    }
+
+}
diff --git a/src/main/java/shape/AbstractShape.java b/src/main/java/shape/AbstractShape.java
new file mode 100644
index 0000000000000000000000000000000000000000..09f0e2063b4711565ba03273e1df2ce7068725f7
--- /dev/null
+++ b/src/main/java/shape/AbstractShape.java
@@ -0,0 +1,16 @@
+package shape;
+
+import java.awt.geom.Point2D;
+import java.util.List;
+
+public  abstract class  AbstractShape implements Shape{
+    List<Point2D> point;
+    public AbstractShape(List<Point2D>point){
+        this.point=point;
+    }
+    public   void addPoints(Point2D points){
+        point.add(points);
+
+    }
+
+}
diff --git a/src/main/java/shape/BorderDecorator.java b/src/main/java/shape/BorderDecorator.java
new file mode 100644
index 0000000000000000000000000000000000000000..6ba7e31534329defe0356a60ddfab4ff39563065
--- /dev/null
+++ b/src/main/java/shape/BorderDecorator.java
@@ -0,0 +1,35 @@
+package shape;
+
+import javafx.scene.canvas.GraphicsContext;
+
+import java.awt.geom.Point2D;
+
+public class BorderDecorator extends Decorator {
+    private double radius;
+
+
+    public BorderDecorator(Shape decoratedShape, double radius ) {
+        super(decoratedShape);
+        this.radius=radius;
+    }
+
+    @Override
+    public void drawDecoration(GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public int pointsCount() {
+        return 0;
+    }
+
+    @Override
+    public Point2D point(int index) {
+        return null;
+    }
+
+    @Override
+    public void draw(GraphicsContext context) {
+
+    }
+}
diff --git a/src/main/java/shape/CenterDecorator.java b/src/main/java/shape/CenterDecorator.java
new file mode 100644
index 0000000000000000000000000000000000000000..0ce6d392e21ac124deabe52087f13c809908a864
--- /dev/null
+++ b/src/main/java/shape/CenterDecorator.java
@@ -0,0 +1,35 @@
+package shape;
+
+import javafx.scene.canvas.GraphicsContext;
+
+import java.awt.geom.Point2D;
+
+public class CenterDecorator extends Decorator{
+    private double radius;
+    public CenterDecorator(Shape decoratedShape, double radius) {
+        super(decoratedShape);
+        this.radius=radius;
+    }
+
+
+    @Override
+    public void drawDecoration(GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public int pointsCount() {
+
+        return 0;
+    }
+
+    @Override
+    public Point2D point(int index) {
+        return null;
+    }
+
+    @Override
+    public void draw(GraphicsContext context) {
+
+    }
+}
diff --git a/src/main/java/shape/Decorator.java b/src/main/java/shape/Decorator.java
new file mode 100644
index 0000000000000000000000000000000000000000..a24c4eaa4b84a037962c314c7aa1f45337a3f318
--- /dev/null
+++ b/src/main/java/shape/Decorator.java
@@ -0,0 +1,16 @@
+package shape;
+
+import javafx.scene.canvas.GraphicsContext;
+
+import java.awt.geom.Point2D;
+
+public abstract class  Decorator implements Shape {
+    private Shape decoratedShape;
+    public Decorator(Shape decoratedShape){
+        this.decoratedShape=decoratedShape;
+    }
+
+
+    public abstract void drawDecoration(GraphicsContext graphicsContext);
+
+}
diff --git a/src/main/java/shape/Polygon.java b/src/main/java/shape/Polygon.java
new file mode 100644
index 0000000000000000000000000000000000000000..569413effbce9b184c6e0fa92517a03ba2990345
--- /dev/null
+++ b/src/main/java/shape/Polygon.java
@@ -0,0 +1,39 @@
+package shape;
+
+import javafx.scene.canvas.GraphicsContext;
+
+import java.awt.geom.Point2D;
+import java.util.List;
+
+public class Polygon extends AbstractShape{
+
+    public Polygon(List<Point2D> point) {
+        super(point);
+    }
+
+    @Override
+    public void addPoints(Point2D points) {
+        super.point.add(points);
+
+    }
+
+    @Override
+    public int pointsCount() {
+        int result=0;
+        for(Point2D a:point){
+            result+=1;
+        }
+        return result;
+
+    }
+
+    @Override
+    public Point2D point(int index) {
+        return point.get( index);
+    }
+
+    @Override
+    public void draw(GraphicsContext context) {
+
+    }
+}
diff --git a/src/main/java/shape/Shape.java b/src/main/java/shape/Shape.java
index 16766e4f3e3128b1582a817d665eb65d32c26047..61f663c177a5b36aa5ec4a48259f018dadb91806 100644
--- a/src/main/java/shape/Shape.java
+++ b/src/main/java/shape/Shape.java
@@ -1,8 +1,9 @@
 package shape;
 
-import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 
+import java.awt.geom.Point2D;
+
 public interface Shape {
     int pointsCount();
     Point2D point(int index);