在uml中覆盖方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在uml中覆盖方法相关的知识,希望对你有一定的参考价值。

我正试图创建UML图,例如,我有一个带有方法a()的类A和扩展A并覆盖方法a()的类B。例如,我有一个带有方法a()的类A和扩展A并覆盖方法a()的类B。在UML中是否有任何标准来表示被覆盖的方法?

答案

正如该答案中所指出的 https:/stackoverflow.coma289324822458991。 有一个特定的指标来表示一个成员(例如一个操作)是被继承的,但这个指标不是强制性的,规范说...。

成员 继承的 分类器 在该分类器的图上显示,方法是在文字表示前加上一个"^"符号,如果是在 成员 并非遗传。

所以,有了.B

enter image description here

B不会覆盖 操作

但是有了.的情况下,我们就无法知道,除非我们确定在模型中总是使用^,如前图所示。

enter image description here

我们无法知道,除非我们确定在模型中总是使用^,就像前面的图一样。

[编辑]

注意规范使用了两次词 成员 (而不是 属性)中,而 级别 继承 分类器所以,这适用于操作。

正如在另一个答案中所注意到的那样,规范也说。

继承的 成员 以浅色显示,以帮助区别于非继承的**成员。

所以又是两次 成员 而非 属性以及他们使用 清楚地提到还有另一种方式,那就是^。所以 两种 表示^适用于操作的一致句子

[警告]

我用的是 BoUML 来做图,在第一个图中,你可以看到"^oper()",但我 "作弊 "地把相应的操作命名为"^oper",在图中没有显示^的选项来表示一个操作或其他成员是继承的。

另一答案

不,对于覆盖父类上的操作,没有特定的指标。如果签名匹配,就会覆盖父类上的操作。

enter image description here

另一答案

规范在第101页上说。

继承的成员也可以用浅色显示,以帮助区分它们和非继承的成员。一个符合规范的实现不需要提供这个选项。

遗憾的是,我的工具(EA)并不支持这个功能。

最简单的方法是只复制那些你要覆盖的操作的操作签名。这样就可以清楚地知道你要覆盖的东西。

enter image description here

只需查看 Class2 无从得知 b 实际上是一个覆盖。但是,如果有人想处理 Class2必须 知道它是一个子类--因此会知晓 b 是一个覆盖。


: UML 2.5 规范对 caret 的使用是模糊的。虽然(在第100页)他们说

在分类器的图上,可以通过在前面加一个'^'符号来显示由分类器继承的成员......。

下面的句法只解释了属性和连接器,这段话是

类似的符号可以用于所有属于分类器的inheritedMembers的NamedElements,以表示它们是继承的。

以上是关于在uml中覆盖方法的主要内容,如果未能解决你的问题,请参考以下文章

模板方法

软件测试基础知识——测试用例设计方法

UML是啥?

软工国标简介 |工具和方法:UML图交换

什么是uml

UML 的基本构成与建模方法