diff --git a/src/main/java/shape/AbstractShape.java b/src/main/java/shape/AbstractShape.java
new file mode 100644
index 0000000000000000000000000000000000000000..4b58511fe9b51b1f8c19d88d52519b78447f89c6
--- /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<>();
+
+    public void addPoints(Point2D... points) {
+        for (Point2D point : points) {
+            this.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 graphicsContext);
+}
+
diff --git a/src/main/java/shape/Shape.java b/src/main/java/shape/Shape.java
index 16766e4f3e3128b1582a817d665eb65d32c26047..8e28d81538421ca80fdf1a1faf379ab81687fcab 100644
--- a/src/main/java/shape/Shape.java
+++ b/src/main/java/shape/Shape.java
@@ -3,8 +3,10 @@ package shape;
 import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 
+
 public interface Shape {
     int pointsCount();
     Point2D point(int index);
-    void draw(GraphicsContext context);
+    void draw(GraphicsContext graphicsContext);
 }
+