OOP对象创建指南

abe*_*nci 5 .net c# oop

假设有一个像这样的多边形类:

public class Polygon 
{
   Point[] _vertices;

   public class Polygon(Point[] vertices)
   {
       _vertices = vertices;
   }
}
Run Code Online (Sandbox Code Playgroud)

要制作三角形,正方形,六边形,你宁愿:

  • 从Polygon继承您的Triangle,Square等类,它提供特定的构造函数并以编程方式生成点?
  • 添加一个CreateSquare返回现成的Polygon类的静态方法?

这个:

public class Square : Polygon
{
   public class Polygon(double size)
   {
       _vertices = new Point[]{ new Point(0,0), new Point(size,0), new Point(size,size), new Point(0,size)};
   }
}
Run Code Online (Sandbox Code Playgroud)

或这个:

public class Polygon 
{
    Point[] _vertices;

    public class Polygon(Point[] vertices)
    {
       _vertices = vertices;
    }

    public static Polygon CreateSquare(double size)
    {
        double verts = new Point[]{ new Point(0,0), new Point(size,0), new Point(size,size), new Point(0,size)};

        return new Polygon(verts);
    }  
 }
Run Code Online (Sandbox Code Playgroud)

从OOP编程的角度来看,哪种方法更正确?请注意,派生类不会向原始Polygon添加任何内容.

另外,在后一种情况下,有没有方便的命名约定?

还有其他方法我不知道吗?

谢谢.

C.E*_*uis 3

如果不知道使用这些类的上下文,这个问题永远不会有明确的答案,但是如果不需要更具体的类,我就不会创建它们。如果您向 . 添加属性,则不会创建RedPolygon或。BlueSquareColorPolygon

一旦存在正方形独有的行为,您就可以创建子类 - 例如,我可以想象一些数学运算(例如命中测试)在正方形上比在恰好是正方形的多边形上执行得更快。