我有以下问题: 我正在创建一个用于创建UML图的应用程序。现在只是为了简化一切,我假设只有几个可用的图表元素:
我决定为所有元素创建一个公共抽象类:
抽象的DiagramElement有2个子类,也是抽象的:
接下来,DiagramRelation有4个子类:
DiagramObject有2个子类:
我真想发布一张图片,这样会更加简单,但我没有足够的声望点,对不起。
我遇到了以下问题:每个元素都有不同的可视化表示,即:界面只有方法等,所以每个元素都需要以不同的方式显示 - 我不想使用多个&# 34;如果"说明。
我使用WPF并且我决定将每个控件放到StackPanel中,它将放在MyContextControl中(在ContextControl之后继承并添加接口属性):
public interface IDiagramElementDraw
{
public StackPanel Draw();
}
public MyContextControl : ContextControl
{
private IDiagramElementDraw _drawingInterface;
private StackPanel context;
public DrawControl()
{
context = _drawingInterface.Draw();
}
}
但是我不知道哪个类应该实现IDiagramElementDraw接口 - 我不想在Interface,Class,Generalization等级上实现它,因为我希望它们只表示每个类的逻辑信息元件。
我会感激任何帮助,随时发布完全不同的解决方案 - 这可能是完全错误的,这只是我的想法。
答案 0 :(得分:0)
使用接口或抽象类作为区别 基础:一个抽象类,一个共享实现;界面是一个 共享合同。他们有一些共性,但遇到不同 要求。例如,您可能想要共享需求(a 小武器和重武器之间的共同界面IProjectile, 或者在致命武器和非致命武器之间实施三者 三个不同抽象类的类别(LethalSmallArms, 所有实现共同的NonLethalSmallArms和Howitzers) 接口IProjectile。
一个抽象类可以小心地扩展为非破坏性的 方式;对界面的所有更改都会发生变化。
更新:相反,接口可以是in或out类型参数 而抽象类则不能。有时一个或另一个更多 适合于给定的设计,有时它是一个折腾。
答案 1 :(得分:0)
一般来说,接口和抽象类都很有用;它只取决于世界卫生组织:
更敏感的选择是将两者结合起来:设计公共接口的层次结构(用于使用),并提供抽象类,其中的成员通常用于任何实现(用于扩展),如果您想让客户端扩展你的API,公开它们。
并且,在所有层次结构的底部,预期私有实现类。
答案 2 :(得分:0)
使用多态可能是一个很好的解决方案,并且会阻止"如果"条件。 1.你可以有一个IDrawable接口,它上面有一个Draw方法。 此接口将由您抽象类实现。 2.然后你将有一个ElementDrawing及其派生类,它将绘制不同的类型(类,接口,...)。它可能是一个虚拟属性,将根据类型在每个DiagramElement中进行不同的实例化。
class abstract DiagramElement : IDrawable
{
public abstract void Draw();
}
class ClassDiagramElement:DiagramElement
{
public overrides void Draw()
{
ElementDrawing elementDrawing = new ClassDrawing();
elementDrawing.DrawElement();
}
}
class InterfaceDiagramElement:DiagramElement
{
public overrides void Draw()
{
ElementDrawing elementDrawing = new InterfaceDrawing();
elementDrawing.DrawElement([maybe need some parameters]);
}
}
ElementDrawing是绘制UML中不同元素的所有派生类的基类。它可以定义为如上所述的虚拟属性。