Я пишу простой графический редактор для университетского проекта с использованием C #.
Я создал иерархию, в которой каждый тип фигуры - круги, прямоугольники, эллипсы, ... - наследуются от базового класса Shape, он содержит цвет фигуры в качестве защищенного поля.
public abstract class Shape {
protected Color color;
public Shape(Color c) {
color = c;
}
public Color FigureColor {
get { return color; }
protected set { color = value; }
}
public abstract void render(Bitmap canvasToDrawOn);
public abstract void unrender(Bitmap canvasToDrawOn);
public abstract void renderPrototype(Bitmap canvasToDrawOn);
}
Идея состоит в том, что я хочу, чтобы каждый тип фигуры инкапсулировал ее геометрическую часть, например:
public class TwoDPoint: TwoDShape {
Point2DGeometry point;
public TwoDPoint(Color c, Point2DGeometry p): base(c) {
point = new Point2DGeometry(p);
}
public struct Point2DGeometry {
Int32 x;
Int32 y;
public Point2DGeometry(Int32 X, Int32 Y) {
x = X;
y = Y;
}
public Point2DGeometry(Point2DGeometry rhs) {
x = rhs.Abscissa;
y = rhs.Ordinate;
}
public Int32 Abscissa {
get { return x; }
private set { x = value; }
}
public Int32 Ordinate {
get { return y; }
private set { y = value; }
}
}
Класс Ellipse будет инкапсулировать EllipseGeometry и т. Д.
Является ли это хорошим решением с точки зрения проектирования ОО, и, если это так, может быть, лучше создать параллельную иерархию типов только для геометрии?