Uml 什么';扩展用例和父用例之间的区别是什么?

Uml 什么';扩展用例和父用例之间的区别是什么?,uml,use-case,use-case-diagram,Uml,Use Case,Use Case Diagram,我对用例图中的扩展用例和父用例之间的区别感到非常困惑。 我想知道什么时候可以使用扩展,什么时候可以使用父用例 例如: 打印单扩展确认 通过贝宝支付继承支付 通过信用卡支付继承支付 继承和扩展之间有什么区别 图像来源:右下角的两个蓝色气泡通过泛化关系继承自支付。虽然看起来很方便,但这是不可取的。与明确定义的类继承不同,UC继承是一个开放字段。UML规范只在一个图中使用了一个泛化,并且绝对没有定义UCs泛化的实际含义 在散文和非正式语言的世界中,用例非常常见。它(可能是因为没有定义)意味着您获

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

例如:

  • 打印单扩展确认
  • 通过贝宝支付继承支付
  • 通过信用卡支付继承支付
继承和扩展之间有什么区别


图像来源:

右下角的两个蓝色气泡通过泛化关系继承自
支付
。虽然看起来很方便,但这是不可取的。与明确定义的类继承不同,UC继承是一个开放字段。UML规范只在一个图中使用了一个泛化,并且绝对没有定义UCs泛化的实际含义

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


注:上面的例子很糟糕。它开始功能分解。用例应显示考虑中的系统应为其参与者带来的单一独特附加值<代码>打印纸条绝对是一个纯粹的功能,没有真正的附加值(现在谁需要纸条?)<代码>产品选择一模一样:这里的附加值是什么<代码>计算…只是告诉我们这是一个函数。基本上您有两个用例:
确认订单
付款
(注意,在标题中描述用例时必须使用动词+实体)


我将一如既往地推荐Bittner/Spence作为优秀的用例阅读工具。

所有用于比较extend和include+泛化的比例就像比较a和b+泛化的聚合:

在图表中,由于扩展,UC打印单中定义的行为可以插入UC确认订单定义的行为中

这些概括就像UML中的其他地方一样,通过paypal支付是一种支付,通过信用卡支付也是一种支付。该图表明UC确认订单包括UC付款或两个继承UC中的一个。因此,UC确认订单的行为包含无条件UC支付的行为或UC通过paypal支付的行为或UC通过信用卡支付的行为


在规范中有一个UCs之间继承的例子,参见第18.1.5章第646页的图18.11,我不认为这张图显示了不正确的用例图,因为我是从一个教程中得到的,现在我认为当我们有两个选项并且我们只能在其中选择一个时,可以使用泛化关系,对于扩展关系,我认为它描述了子任务,来自用例主体的子用例。我没有说它是错误的。这只是一个坏主意,使用它,因为UC固有的蒸汽器皿。没有明确的定义,在上述情况下,我认为这是一个设计错误。用贝宝和信用卡支付几乎没有什么共同点,除了你最后有一笔汇款。如果你没有继承任何东西,那么泛化的意义何在。此外,UC应该描述一个独特的附加值,概括与独特性相矛盾。啊,不要告诉我它必须是正确的,因为它来自一个教程。我在这里看到了很多绝对错误的教程。UC图基本上是一个函数分解。这只是一个糟糕的(如果不是说)错误的例子。