在 UML 静态 class 图中是否有显示重写方法的约定?

Is there a convention for showing overridden methods in UML static class diagrams?

如果class Human继承superclass的部分方法Mammal不变(如laysEggs: () -> false)并覆盖其他方法(如postsToWhosebug : () -> true),在 Human 的 UML 静态 class 图部分中,不同方法的指示方式是否有任何区别?例如,Human 的框中是否只显示覆盖的方法,或者两者都显示,并为覆盖的方法添加一些注释?

现在有了。一些匿名让我深入研究 2.5.1. specs。在第102 它说

Members that are inherited by a Classifier may be shown on a diagram of that Classifier by prepending a caret ’^’ symbol to the textual representation that would be shown if the member were not inherited. Thus the notation for an inherited Property is defined like this:

<inherited-property> ::= ’^’ <property>

where <property> is specified in 9.5.4.

Similarly, the notation for an inherited Connector is defined like this:

<inherited-connector> ::= ’^’ <connector>

where <connector> is specified in 11.2.4.

Analogous notations may be used for all NamedElements that are inheritedMembers of a Classifier to indicate that they are inherited.

Inherited members may also be shown in a lighter color to help distinguish them from non-inherited members. A conforming implementation does not need to provide this option.

由于它适用于 NamedElements,因此它也可用于属性和操作。

除了第 9.11 页的图 9.11 之外,规范本身(还)没有大量使用插入符号。第 115 页和图 10.9。 173.


在 2.5 及之前的规范中,答案是:不,没有。您只能通过检查继承自 class 的方法来判断方法是否被覆盖。

请参阅@qwerty_so 回答以了解更多最新规范。我在下面提出的符号来自 2008 年之前过时的图表教科书和大学教学。

虽然 UML 标准中没有指定,但以下是一种表示法,表示一个函数何时覆盖另一个函数:

+ toString() : String <<override>>

我复制了方法声明,如果我想表明继承的 class 将覆盖它,在其他情况下只需省略声明。