diff --git a/.idea/misc.xml b/.idea/misc.xml
index 480dc8a7b94017006a3c6b6c36395e0fff6eaa41..47fb4ee8487e99668c1ee94d3a98d65ba72ca881 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ExternalStorageConfigurationManager" enabled="true" />
   <component name="FrameworkDetectionExcludesConfiguration">
diff --git a/src/main/java/shape/AbstractShape.java b/src/main/java/shape/AbstractShape.java
index 09f0e2063b4711565ba03273e1df2ce7068725f7..c4bc0b0f2af6a25f825c0f1810eef64fdd214850 100644
--- a/src/main/java/shape/AbstractShape.java
+++ b/src/main/java/shape/AbstractShape.java
@@ -1,16 +1,31 @@
 package shape;
 
-import java.awt.geom.Point2D;
+import javafx.geometry.Point2D;
+import java.util.ArrayList;
 import java.util.List;
 
-public  abstract class  AbstractShape implements Shape{
-    List<Point2D> point;
-    public AbstractShape(List<Point2D>point){
-        this.point=point;
+public abstract class AbstractShape implements Shape {
+    protected List<Point2D> points;
+
+    public AbstractShape() {
+        this.points = new ArrayList<>();
+    }
+
+    public AbstractShape(List<Point2D> points) {
+        this.points = points;
     }
-    public   void addPoints(Point2D points){
-        point.add(points);
 
+    @Override
+    public int pointsCount() {
+        return points.size();
     }
 
+    @Override
+    public Point2D point(int index) {
+        return points.get(index);
+    }
+
+    public void addPoint(Point2D point) {
+        points.add(point);
+    }
 }
diff --git a/src/main/java/shape/App.java b/src/main/java/shape/App.java
index 1a519e1401fe032f06aeee35967a27e48ca362fe..5bf2d41d8ec60d0295eb59369ab2c07b1f75145e 100644
--- a/src/main/java/shape/App.java
+++ b/src/main/java/shape/App.java
@@ -7,11 +7,8 @@ import javafx.scene.Scene;
 import javafx.scene.canvas.Canvas;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.paint.Color;
-import javafx.scene.paint.Paint;
 import javafx.stage.Stage;
 
-
-
 public class App extends Application {
 
     public static void main(String[] args) {
@@ -20,16 +17,35 @@ public class App extends Application {
 
     @Override
     public void start(Stage primaryStage) {
+
         Group root = new Group();
-        Canvas canvas = new Canvas(130, 110);
+        Canvas canvas = new Canvas(400, 400);
         GraphicsContext graphicsContext = canvas.getGraphicsContext2D();
+
         ShapeContainer shapeContainer = new ShapeContainer();
-        graphicsContext.setFill(Color.AQUAMARINE);
-        graphicsContext.fillOval(10,10,10,10);
-        shapeContainer.addShape(new Rectangle(Color.BLUE,new Point2D(10,10), new Point2D(40,40)));
+
+        Shape rectangle = new Rectangle(Color.BLUE, new Point2D(50, 50), new Point2D(150, 100));
+
+        Shape borderDecoratedRectangle = new BorderDecorator(rectangle, 5);
+
+        Shape centerDecoratedRectangle = new CenterDecorator(borderDecoratedRectangle, 10);
+
+        shapeContainer.addShape(centerDecoratedRectangle);
+
+        Shape polygon = new Polygon(Color.GREEN,
+                new Point2D(200, 200),
+                new Point2D(300, 250),
+                new Point2D(250, 350));
+
+        Shape borderDecoratedPolygon = new BorderDecorator(polygon, 5);
+
+        shapeContainer.addShape(borderDecoratedPolygon);
+
         shapeContainer.draw(graphicsContext);
+
         root.getChildren().add(canvas);
         primaryStage.setScene(new Scene(root));
+        primaryStage.setTitle("Shape Decorator Example with Polygon");
         primaryStage.show();
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/shape/BorderDecorator.java b/src/main/java/shape/BorderDecorator.java
index 6ba7e31534329defe0356a60ddfab4ff39563065..d413e628a093b43efd0bd6f234ff71759148bba4 100644
--- a/src/main/java/shape/BorderDecorator.java
+++ b/src/main/java/shape/BorderDecorator.java
@@ -1,35 +1,21 @@
 package shape;
 
+import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 
-import java.awt.geom.Point2D;
-
 public class BorderDecorator extends Decorator {
     private double radius;
 
-
-    public BorderDecorator(Shape decoratedShape, double radius ) {
+    public BorderDecorator(Shape decoratedShape, double radius) {
         super(decoratedShape);
-        this.radius=radius;
+        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) {
-
+        for (int i = 0; i < decoratedShape.pointsCount(); i++) {
+            Point2D point = decoratedShape.point(i);
+            graphicsContext.strokeOval(point.getX() - radius, point.getY() - radius, 2 * radius, 2 * radius);
+        }
     }
 }
diff --git a/src/main/java/shape/CenterDecorator.java b/src/main/java/shape/CenterDecorator.java
index 0ce6d392e21ac124deabe52087f13c809908a864..91e87124993deb208651a4998b777b2bd189fb50 100644
--- a/src/main/java/shape/CenterDecorator.java
+++ b/src/main/java/shape/CenterDecorator.java
@@ -1,35 +1,30 @@
 package shape;
 
+import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 
-import java.awt.geom.Point2D;
-
-public class CenterDecorator extends Decorator{
+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) {
-
+        this.radius = radius;
     }
 
     @Override
-    public int pointsCount() {
-
-        return 0;
-    }
-
-    @Override
-    public Point2D point(int index) {
-        return null;
-    }
-
-    @Override
-    public void draw(GraphicsContext context) {
-
+    protected void drawDecoration(GraphicsContext graphicsContext) {
+        if (decoratedShape.pointsCount() >= 2) {
+            Point2D p1 = decoratedShape.point(0);
+            Point2D p2 = decoratedShape.point(1);
+
+            // Calculer le centre comme la moyenne des coordonnées des deux premiers points
+            double centerX = (p1.getX() + p2.getX()) / 2;
+            double centerY = (p1.getY() + p2.getY()) / 2;
+
+            // Dessiner un cercle autour du centre calculé
+            graphicsContext.strokeOval(centerX - radius, centerY - radius, 2 * radius, 2 * radius);
+        } else {
+            System.err.println("The decorated shape must have at least two points to calculate a center.");
+        }
     }
 }
diff --git a/src/main/java/shape/Circle.java b/src/main/java/shape/Circle.java
index 81d9175dc3977c5c95dec3693569c12ad12d8315..70d90277768d84ecf61e18065cebc5902d99f57f 100644
--- a/src/main/java/shape/Circle.java
+++ b/src/main/java/shape/Circle.java
@@ -2,24 +2,27 @@ package shape;
 
 import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.paint.Color;
 
-public class Circle implements Shape {
+public class Circle extends AbstractShape {
+    private Color color;
+    private double radius;
 
-    public Circle(double x, double y, double sqrt) {
-    }
-
-    @Override
-    public int pointsCount() {
-        return 0;
-    }
-
-    @Override
-    public Point2D point(int index) {
-        return null;
+    public Circle(Color color, Point2D center, double radius) {
+        super();
+        this.color = color;
+        this.radius = radius;
+        addPoint(center);
     }
 
     @Override
     public void draw(GraphicsContext context) {
+        Point2D center = point(0);
+        double x = center.getX() - radius;
+        double y = center.getY() - radius;
+        double diameter = 2 * radius;
 
+        context.setFill(color);
+        context.fillOval(x, y, diameter, diameter);
     }
 }
diff --git a/src/main/java/shape/Decorator.java b/src/main/java/shape/Decorator.java
index a24c4eaa4b84a037962c314c7aa1f45337a3f318..bf0d0ab69319bccbc7b53b79008f89403244e83d 100644
--- a/src/main/java/shape/Decorator.java
+++ b/src/main/java/shape/Decorator.java
@@ -1,16 +1,30 @@
 package shape;
 
+import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 
-import java.awt.geom.Point2D;
+public abstract class Decorator implements Shape {
+    protected Shape decoratedShape;
 
-public abstract class  Decorator implements Shape {
-    private Shape decoratedShape;
-    public Decorator(Shape decoratedShape){
-        this.decoratedShape=decoratedShape;
+    public Decorator(Shape decoratedShape) {
+        this.decoratedShape = decoratedShape;
     }
 
+    @Override
+    public int pointsCount() {
+        return decoratedShape.pointsCount();
+    }
+
+    @Override
+    public Point2D point(int index) {
+        return decoratedShape.point(index);
+    }
 
-    public abstract void drawDecoration(GraphicsContext graphicsContext);
+    @Override
+    public void draw(GraphicsContext graphicsContext) {
+        decoratedShape.draw(graphicsContext);
+        drawDecoration(graphicsContext);
+    }
 
+    protected abstract void drawDecoration(GraphicsContext graphicsContext);
 }
diff --git a/src/main/java/shape/Polygon.java b/src/main/java/shape/Polygon.java
index 569413effbce9b184c6e0fa92517a03ba2990345..77ed7f0a2cf67338110f34d7c07e32e5a3ec44f6 100644
--- a/src/main/java/shape/Polygon.java
+++ b/src/main/java/shape/Polygon.java
@@ -1,39 +1,27 @@
 package shape;
 
+import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.paint.Color;
 
-import java.awt.geom.Point2D;
-import java.util.List;
+import java.util.Arrays;
 
-public class Polygon extends AbstractShape{
+public class Polygon extends AbstractShape {
+    private Color color;
 
-    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);
+    public Polygon(Color color, Point2D... points) {
+        super(Arrays.asList(points));
+        this.color = color;
     }
 
     @Override
     public void draw(GraphicsContext context) {
+        if (pointsCount() < 2) return;
+
+        double[] xPoints = points.stream().mapToDouble(Point2D::getX).toArray();
+        double[] yPoints = points.stream().mapToDouble(Point2D::getY).toArray();
 
+        context.setFill(color);
+        context.fillPolygon(xPoints, yPoints, pointsCount());
     }
 }
diff --git a/src/main/java/shape/Rectangle.java b/src/main/java/shape/Rectangle.java
index b0e90627b6345f22ac31ab8bf5fb40f81e4d4f66..01d926b9701b232cebb420bc010a196354018879 100644
--- a/src/main/java/shape/Rectangle.java
+++ b/src/main/java/shape/Rectangle.java
@@ -4,24 +4,27 @@ import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.paint.Color;
 
-public class Rectangle implements Shape{
-    Color color;
-    Rectangle(Color color, Point2D point0, Point2D point1){
-        this.color = color;
-    }
+import java.util.Arrays;
 
-    @Override
-    public int pointsCount() {
-        return 0;
-    }
+public class Rectangle extends AbstractShape {
+    private Color color;
 
-    @Override
-    public Point2D point(int index) {
-        return null;
+    public Rectangle(Color color, Point2D point1, Point2D point2) {
+        super(Arrays.asList(point1, point2));
+        this.color = color;
     }
 
     @Override
     public void draw(GraphicsContext context) {
+        Point2D p1 = point(0);
+        Point2D p2 = point(1);
+
+        double x = Math.min(p1.getX(), p2.getX());
+        double y = Math.min(p1.getY(), p2.getY());
+        double width = Math.abs(p1.getX() - p2.getX());
+        double height = Math.abs(p1.getY() - p2.getY());
 
+        context.setFill(color);
+        context.fillRect(x, y, width, height);
     }
 }
diff --git a/src/main/java/shape/Shape.java b/src/main/java/shape/Shape.java
index 61f663c177a5b36aa5ec4a48259f018dadb91806..5472cfe0cd9f671bfb0aaa1df227b0c0d8a5f64d 100644
--- a/src/main/java/shape/Shape.java
+++ b/src/main/java/shape/Shape.java
@@ -1,11 +1,10 @@
 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);
-    void draw(GraphicsContext context);
+    void draw(GraphicsContext graphicsContext);
 }
diff --git a/src/main/java/shape/ShapeContainer.java b/src/main/java/shape/ShapeContainer.java
index 91c7d2977ecd7352ceb7ffbe45f9c541bfd8d45f..aae70ed5e542047b60b0f7147f021811017bdbc7 100644
--- a/src/main/java/shape/ShapeContainer.java
+++ b/src/main/java/shape/ShapeContainer.java
@@ -9,7 +9,9 @@ public class ShapeContainer{
 
     private List<Shape> shapes = new ArrayList<>();
 
-    public void addShape(Shape shape){}
+    public void addShape(Shape shape){
+        shapes.add(shape);
+    }
 
     public void  draw(GraphicsContext context){
         for(Shape shape : shapes)