diff --git a/src/main/java/shape/AbstractShape.java b/src/main/java/shape/AbstractShape.java
index cbe678da37f1fd4a1a2c6cebe3bb54ac27b3a281..3de588645a103659916d26406f220443fdef1e37 100644
--- a/src/main/java/shape/AbstractShape.java
+++ b/src/main/java/shape/AbstractShape.java
@@ -6,7 +6,7 @@ import javafx.scene.canvas.GraphicsContext;
 import java.util.List;
 
 public class AbstractShape implements Shape {
-    List<Point2D> points;
+    private List<Point2D> points;
 
     public AbstractShape(List<Point2D> points) {
         this.points = points;
@@ -17,16 +17,23 @@ public class AbstractShape implements Shape {
     }
     @Override
     public int pointsCount() {
-        return 0;
+        int count = 0;
+        for (Point2D point : points) {
+            count++;
+        }
+        return count;
     }
 
     @Override
     public Point2D point(int index) {
-        return null;
+        return index < points.size() ? points.get(index) : null;
     }
 
     @Override
     public void draw(GraphicsContext context) {
+        for (Point2D point : points) {
+
+        }
 
     }
 }
diff --git a/src/main/java/shape/BorderDecorator.java b/src/main/java/shape/BorderDecorator.java
index 1f834b3ed92093b0d393efadd6aeb752b1502519..05a6d6440ec5be918e4955bb36c018857efad67d 100644
--- a/src/main/java/shape/BorderDecorator.java
+++ b/src/main/java/shape/BorderDecorator.java
@@ -4,13 +4,13 @@ import javafx.scene.canvas.GraphicsContext;
 
 public class BorderDecorator extends Decorator {
 
-    double radius;
+    private double radius;
 
     public BorderDecorator(Shape decoratedShape ,double radius) {
         super(decoratedShape);
         this.radius = radius;
     }
-        public void drawDecoration(GraphicsContext context) {
+        protected void drawDecoration(GraphicsContext context) {
 
     }
 }
diff --git a/src/main/java/shape/CenterDecorator.java b/src/main/java/shape/CenterDecorator.java
index 407dd31c4a44fcf759c11472dd3263889158d00a..0eece70968d81a4ae94863f3c15330a41ffcdccd 100644
--- a/src/main/java/shape/CenterDecorator.java
+++ b/src/main/java/shape/CenterDecorator.java
@@ -3,12 +3,12 @@ package shape;
 import javafx.scene.canvas.GraphicsContext;
 
 public class CenterDecorator extends Decorator{
-    double radius;
+    private double radius;
     public CenterDecorator(Shape decoratedShape, double radius) {
         super(decoratedShape);
         this.radius = radius;
     }
-        public void drawDecoration(GraphicsContext context) {
+        protected void drawDecoration(GraphicsContext context) {
 
     }
 }
diff --git a/src/main/java/shape/Decorator.java b/src/main/java/shape/Decorator.java
index ead5f5c0beb86eb49d9db70c85733899147c1088..2f085454682d579dca82a4717c155defb11974f7 100644
--- a/src/main/java/shape/Decorator.java
+++ b/src/main/java/shape/Decorator.java
@@ -3,14 +3,14 @@ package shape;
 import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 
-public class Decorator implements Shape {
-    private Shape shape;
+public abstract class Decorator implements Shape {
+    protected Shape decoratedshape;
     public Decorator(Shape decoratedShape) {
-        this.shape = decoratedShape;
+        this.decoratedshape = decoratedShape;
     }
     @Override
     public int pointsCount() {
-        return 0;
+        return decoratedshape.pointsCount();
     }
 
     @Override
@@ -22,7 +22,7 @@ public class Decorator implements Shape {
     public void draw(GraphicsContext context) {
 
     }
-    public void drawDecoration(GraphicsContext context) {
+    protected void drawDecoration(GraphicsContext context) {
 
     }
 }
diff --git a/src/main/java/shape/Polygon.java b/src/main/java/shape/Polygon.java
index d502ce35d91562567a997c6003c8ceefeefcb05d..d5501cb0ae57ea3163bba3ebfbecd7f0efe1ba03 100644
--- a/src/main/java/shape/Polygon.java
+++ b/src/main/java/shape/Polygon.java
@@ -6,7 +6,7 @@ import javafx.scene.paint.Color;
 
 public class Polygon implements Shape {
 
-    Color color;
+    private Color color;
 
     public Polygon(Color color, Point2D... points) {
         this.color = color;
@@ -19,11 +19,12 @@ public class Polygon implements Shape {
 
     @Override
     public Point2D point(int index) {
-        return null;
+        return point(index);
     }
 
     @Override
     public void draw(GraphicsContext context) {
+        context.setFill(color);
 
     }
 }
diff --git a/src/main/java/shape/Rectangle.java b/src/main/java/shape/Rectangle.java
index b0e90627b6345f22ac31ab8bf5fb40f81e4d4f66..ff2fcc4834612c25b5911b202c1972fd3f8060c3 100644
--- a/src/main/java/shape/Rectangle.java
+++ b/src/main/java/shape/Rectangle.java
@@ -5,23 +5,23 @@ import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.paint.Color;
 
 public class Rectangle implements Shape{
-    Color color;
+    private Color color;
     Rectangle(Color color, Point2D point0, Point2D point1){
         this.color = color;
     }
 
     @Override
     public int pointsCount() {
-        return 0;
+        return 2;
     }
 
     @Override
     public Point2D point(int index) {
-        return null;
+        return point(index);
     }
 
     @Override
     public void draw(GraphicsContext context) {
-
+        context.setFill(color);
     }
 }