3

在 Enterprise Architect(版本 9.2.921)中,我想制作一个类图。我有一个MyInterface充当 Interface 的类。所以在EA中我选择了stereotype<<interface>>并将其标记为abstract.

现在为简单起见,我的抽象接口定义了一个虚函数。现在我有一个类MyChild,它是我的接口 ( class MyChild :: MyInterface) 的子类,它应该实现这个功能。

为此,我在 EA 中创建了一个新类。然后右键单击它 - > Advanced - > Parent 。作为我选择的类型implements,然后我选择我的接口类。

在我的类图中,从子级到父级的箭头是正确的(虚线,空箭头指向界面方向)。

现在的问题是,我希望 EA 将我的抽象函数从接口直接添加到实现类本身中。因此,例如,如果我在 Interface 类中更改/添加/删除一个虚函数,它会立即在子类中更改。但问题是,该函数没有出现在子类的主体中。

有什么办法可以让 Enterprise Architecht 做到这一点?

4

3 回答 3

4

首先,还有另一种绘制连接的方法,您可能会发现它更容易。如果您选择图表中的类,您会看到该类的正上方/右侧出现一个小箭头图标。单击此按钮,拖动到界面并放下,EA 将为您提供一组可能的连接器,首先是最相关的连接器。此列表基于源和目标元素类型(在本例中为类和接口)是上下文相关的。

当谈到“Overrides & Implementations”对话框时,涉及到一些微妙之处。

如果一个类实现了一个接口,这个类实际上有接口指定的操作,虽然是隐藏的,即使你没有选择它们来实现(这就是为什么在这个对话框中默认取消选择接口操作的原因)。

如果您在序列图中使用该类,并对其进行调用,您将看到您可以在“消息属性”对话框中选择接口定义的操作(前提是选择了“显示继承方法”)。如果您在界面中重命名操作,此名称将自动更新。

如果你在两个类之间进行概括,你会在序列图中得到相同的行为。此外,您可以选择显示类的继承(通过泛化)操作,方法是右键单击它,选择“Feature Visibility”并勾选“Show Operations”。请注意,这只适用于通过泛化(来自其他类)而不是实现(来自接口)的操作。我认为这是一个错误,但它可能是设计使然。

如果您确实在“Overrides & Implementations”对话框中选择了一个操作,这意味着您正在制作它的副本。EA 不会记住被覆盖的操作来自哪里,并且如果您在接口/抽象类中更改它也不会更新名称。

正如您所指出的,使用右键单击 - 高级 - 父方法绕过“覆盖和实现”对话框但创建连接器。

现在您提到您创建了一个类,然后设置了“接口”原型。这不是这样做的方法。您应该使用工具箱中的接口符号来创建接口。具有“接口”构造型的类与接口不同,我不确定我所描述的哪些行为会通过该构造得到。

如果它是您想要的接口,请使用它。另一方面,如果您在谈论抽象类,那么 Class 是正确的,抽象类和具体类都不应该具有“接口”原型。

另请注意,如果您有一个要为其绘制图表的代码库,那么 EA 很可能会为您对其进行逆向工程(如果它使用 C++、C#、Java 或大约十几种其他语言)。

于 2012-03-13T11:37:23.787 回答
2

好的,我找到了一种方法:

  1. 删除两个类之间的连接(如果已经有一个)
  2. RealizationClass Relationships工具箱中选择
  3. 从您的 Child 类到界面画一条线
  4. 释放鼠标时,系统会提示您选择孩子应实现的功能

这样您就不必一次又一次地重新键入所有函数原型 - 但是如果您更改接口中的原型,它不会更改实现中的相应函数。(也许还有另一种方法,但我还不知道......)

于 2012-03-13T09:25:05.013 回答
0

我有同样的问题。

我对答案并不满意。如何“删除”实现

  • 如果"Delete"="Hide on Diagram",最后会有两个Realization-Assocs
  • 如果 "Delete"="Delete from Model" 这个 Assoc 在其他图表中被删除,它被使用
于 2013-09-11T13:07:44.980 回答