J'écris un éditeur graphique simple pour un projet universitaire en utilisant C#.
J'ai créé une hiérarchie où chaque type de forme - cercles, rectangles, ellipses, ... - est hérité d'une forme de classe de base, il contient une couleur de forme comme un champ protégé.
Est-ce une bonne idée de diviser chaque forme graphique en deux parties - sa géométrie et ses composants de rendu?
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);
}
L'idée est que je veux que chaque type de forme pour encapsuler `s une partie de la géométrie, par exemple:
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; }
}
}
classe Ellipse encapsule EllipseGeometry, etc.
Est-ce une bonne décision en termes de conception OO, et si c'est le cas, peut-être est-ce la meilleure idée de créer une hiérarchie parallèle de ces types de géométrie seulement?