diff --git a/src/main/java/shape/AbstractShape.java b/src/main/java/shape/AbstractShape.java
new file mode 100644
index 0000000000000000000000000000000000000000..4fc406258e4ac71a261c564d098130e571d5677d
--- /dev/null
+++ b/src/main/java/shape/AbstractShape.java
@@ -0,0 +1,30 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class AbstractShape implements Shape {
+    protected List<Point2D> points = new ArrayList<>();
+
+    // Méthode pour ajouter des points à la forme
+    public void addPoints(Point2D... newPoints) {
+        for (Point2D point : newPoints) {
+            points.add(point);
+        }
+    }
+
+    @Override
+    public int pointsCount() {
+        return points.size();
+    }
+
+    @Override
+    public Point2D point(int index) {
+        return points.get(index);
+    }
+
+    @Override
+    public abstract void draw(GraphicsContext context);  // Méthode abstraite pour dessiner la forme
+}
diff --git a/src/main/java/shape/Polygon.java b/src/main/java/shape/Polygon.java
new file mode 100644
index 0000000000000000000000000000000000000000..c2b025f35393bd678f6a821ba8e93597fc38aed7
--- /dev/null
+++ b/src/main/java/shape/Polygon.java
@@ -0,0 +1,29 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.paint.Color;
+
+public class Polygon extends AbstractShape {
+    private Color color;
+
+    public Polygon(Color color, Point2D... points) {
+        this.color = color;
+        addPoints(points);  // Ajoute les points du polygone
+    }
+
+    @Override
+    public void draw(GraphicsContext context) {
+        context.setFill(color);
+        // Trace les côtés du polygone en reliant les points
+        context.beginPath();
+        Point2D firstPoint = points.get(0);
+        context.moveTo(firstPoint.getX(), firstPoint.getY());
+        for (int i = 1; i < points.size(); i++) {
+            Point2D point = points.get(i);
+            context.lineTo(point.getX(), point.getY());
+        }
+        context.closePath();
+        context.fill();
+    }
+}