UML用例“扩展”和继承之间有什么区别吗?

时间:2010-09-24 20:03:08

标签: oop uml

或者“extends”是继承另一个用例?

- 更新

只是澄清一下,我读过书并制作了很多图表。但我看不出扩展UML和内容之间的任何区别。正如比尔所说,UML extends 表示可选行为,但是在你看来,你可以获得或不使用新行为。那么,有什么区别?

4 个答案:

答案 0 :(得分:2)

这与继承非常相似。 See a detailed description of this concept here.

享受!

答案 1 :(得分:2)

我认为在UML中,区别在于“extends”基于扩展点,这意味着在应用扩展的用例中必须有一个命名点。语义对此并不十分精确。用例的继承意味着改变某些行为,而不是在exzactly指定where。

另一个重点是关于继承和Liskov替换原则。您应该可以在任何可以使用另一个用例的地方使用一个继承自另一个用例的用例。这不适用于“延伸”的理解方式。当一个用例被另一个用例扩展时,它意味着一个用例可能被另一个用例修改,但它仍然包含主要的场景路径,它可能由扩展用例分叉和连接。我认为,这是关于结构和行为继承之间的差异。继承是关于实现相同的目标并满足相同的兴趣 - 相同的责任和行为约束,其中扩展是关于修改场景路径的结构,这可能由其他兴趣触发 - 如错误检查。

继承实际上并不是一个非常好用于用例的机制,与actor继承相结合,这更有意义,它可能导致不必要的悖论。根据Alistair Cockburn(编写有效用例)的建议,继承应仅用于表达特定用例的技术细节或数据格式的变化。

答案 2 :(得分:1)

Extends用于向正在扩展的用例添加其他可选行为,但不会更改基本用例中的任何行为。

继承用例将替换继承用例的一个或多个行为。换句话说,改变基本用例的行为,而不是简单地添加新功能。请注意,用例继承与类继承并不完全相同。

请参阅this article

答案 3 :(得分:1)

在我公司使用的工具中,我们有建模限制。

<强>继承: 从Actor到Actor,从UseCase到Usecase,从System到System。你的图表中不能有其他遗产,因为我有一个禁止的标志。

扩展只能在两个用例之间完成,而不能在其他元素之间完成。

我真的没有看到继承和两个用例之间的区别。 我将继续阅读下一篇文章,因为在阅读完所有答案后我仍然不明白: - )