UML用例中的"extends"和继承有什么区别吗?

5

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

--更新

只是澄清一下,我已经读了很多书并制作了很多图表。但我就是看不出UML上的“extends”和继承上有什么区别。正如Bill所说,UML的“extends”表示可选行为,但在继承中,您要么获得新的行为,要么不使用。那么,两者有什么区别呢?

4个回答

3
我认为在UML中,“extends”是基于扩展点的,这意味着在用例中必须有一个命名点来应用扩展。关于此,语义并不是非常精确。对于用例的继承,意味着改变某些行为,而不是准确地指定位置。
另一个重要的问题涉及继承和Liskov替换原则。你应该能够在任何可以使用另一个 use case 的地方使用继承自另一 use case 的一个 use case。但这并不适用于“extends”的理解方式。当一个用例被另一个用例扩展时,这意味着一个用例可能会被另一个修改,但它仍然包含主场景路径,而扩展用例可能会分叉和合并主场景路径。我认为这就是结构继承和行为继承之间的区别。继承是为了实现同样的目标,满足相同的利益-相同的责任和行为约束,而扩展是指场景路径结构的修改,可能会被附加利益-如错误检查-触发。
实际上,继承不是用于用例的很好机制,与演员继承相结合更具意义,它可能导致不需要的悖论。根据Alistair Cockburn(编写有效用例)的建议,继承只应用于表示特定用例的技术细节或数据格式的变化。

2
"Extends" 用于向被扩展的用例中添加额外的、可选的行为,但不会改变基本用例中的任何行为。
继承使用案例将替换继承使用案例的一个或多个行为。换句话说,改变了基本用例的行为,而不仅仅是添加新功能。请注意,用例继承并不完全等同于类继承。
请参见本文

1
扩展案例是一种可以使用或不使用的行为。就像当我扩展一个类时,我可以使用它的行为或不使用... - The Student
我不同意 - 因为您提供的链接中指出“一个用例(扩展)扩展了另一个用例的行为”,这就是继承的基础。 - Doug

2

2
在我公司使用的工具中,我们有建模限制。 继承: 从Actor到Actor、从UseCase到UseCase、从System到System。你不能在你的图表中有其他的继承,因为我看到了一个禁止标志。 扩展只能在两个UseCases之间进行,而不能在其他元素之间进行。
我真的看不出继承和用例之间的扩展有什么区别。我将继续阅读下一篇文章,因为在阅读所有答案后,我仍然不理解 :-)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接