【问题标题】:Enterprise Architect - Inherit methods from interface in class diagramEnterprise Architect - 从类图中的接口继承方法
【发布时间】:2012-03-29 03:32:19
【问题描述】:

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

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

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

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

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

有没有办法让 Enterprise Architecht 做到这一点?

【问题讨论】:

    标签: c++ uml class-diagram enterprise-architect


    【解决方案1】:

    好的,我找到了方法:

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

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

    【讨论】:

      【解决方案2】:

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

      当谈到“覆盖和实现”对话框时,涉及到一些微妙之处。

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

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

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

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

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

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

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

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

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题。

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

        • 如果“Delete”="Hide on Diagram",最后会有两个 Realization-Assoc
        • 如果 "Delete"="Delete from Model" 这个 Assoc 在其他使用它的图表中被删除

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-04-18
          • 2022-01-21
          • 2021-11-13
          • 2013-02-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多