扩展用例和父用例之间有什么区别?

What's the difference between extension use case and parent use case?

我对用例图中的扩展用例和父用例之间的区别感到很困惑。 我想知道什么时候可以使用 extend 以及什么时候可以使用父用例?

例如:

继承和扩展有什么区别?

图片来源:https://t4tutorials.com/use-case-diagrams/

右下角的两个蓝色泡泡通过泛化关系继承自Payment。嗯,虽然看起来很方便,但并不可取。与明确定义的 class 继承不同,UC 继承是一个开放领域。 UML 规范仅在一个图表中使用概括,并且完全没有定义 UC 的概括实际上意味着什么!

用例在散文和非正式语言的世界中非常普遍。它(可能,因为没有定义)意味着您获取 parent UC 的描述并将其部分替换(覆盖)为继承 UC 中定义的文本。从有时部分起作用的上下文。然而,通过信用卡和 Paypal 支付是非常不同的(你知道的)并且没有太多共同点。因此,更好的方法是使用各种支付方式来“扩展”Payment。这样你就有了一个固定的支付程序,可以选择使用信用卡或 Paypal 方式(如果这样设计,甚至可以混合使用)。


N.B.: 上面的例子只是一个糟糕的例子。它开始功能分解。用例应显示正在考虑的系统应为其参与者带来的单一独特附加值。 Print slip 绝对是一个纯函数,没有真正的附加值(现在谁需要纸条?)。 Selection of product 一样:这里的附加值是什么? Calculate... 只是告诉它是一个函数。基本上你有两个用例:Confirm orderMake payment(请注意,在描述标题中的用例时必须使用动词+实质)。

一如既往,我将推荐 Bittner/Spence 作为有关用例的优秀读物。

保留所有比例以比较扩展和包含 + 概括就像比较聚合 ab + 中的概括:

在您的图表中,由于扩展了 UC 中定义的行为 Print Slip 可以 插入到 UC 定义的行为中确认订单

概括就像它们在 UML 中的其他地方一样,pay through paypalPaymentpay through credit card 也是 Payment。该图表明 UC Confirm Order 包括 UC Payment 或两个继承 UC 之一。所以UCConfirm Order的行为包含[=36​​=]unconditionallyUCPayment的行为或者UC通过paypal支付或UC通过信用卡支付的行为

规范中有UC之间继承的例子,见formal/2017-12-05

第18.1.5章第646页图18.11