Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<;扩展>;UML中的依赖关系_Uml_Extend - Fatal编程技术网

<;扩展>;UML中的依赖关系

<;扩展>;UML中的依赖关系,uml,extend,Uml,Extend,除了UML的上下文之外,如果A扩展了B,那么B是A的子集 但在UML中,情况正好相反,比如说,如果A扩展了B,那么A是B的子集 为什么这么奇怪?用用例来写(我相信这是你的意思——如果不是,纠正我),以免想到在你最喜欢的快餐店点餐 基本用例是订购一顿饭,但如果您提供折扣优惠券,它可以扩展。每次你吃过这种食物,你都会得到一顿饭,但只有在特殊情况下,你才会比平时少付钱(或者多吃一块三明治) 我在这里找到了一个很好的例子:。正如您所看到的,国际学生注册包括额外的安全检查,并且仅应用于注册的子集。希望这会

除了UML的上下文之外,如果A扩展了B,那么B是A的子集

但在UML中,情况正好相反,比如说,如果A扩展了B,那么A是B的子集


为什么这么奇怪?

用用例来写(我相信这是你的意思——如果不是,纠正我),以免想到在你最喜欢的快餐店点餐

基本用例是订购一顿饭,但如果您提供折扣优惠券,它可以扩展。每次你吃过这种食物,你都会得到一顿饭,但只有在特殊情况下,你才会比平时少付钱(或者多吃一块三明治)

我在这里找到了一个很好的例子:。正如您所看到的,国际学生注册包括额外的安全检查,并且仅应用于注册的子集。希望这会有更多帮助。

依赖关系仅用于用例。这意味着在某些情况下,一个用例扩展了另一个用例。在以下方面:

客户端查看帐户详细信息。在某些情况下,客户还可以“查看未结订单”作为“查看账户详细信息”的一部分。也有可能客户将“查看历史记录”作为“查看帐户详细信息”的一部分

这与泛化/专门化无关


在用例图中令人困惑。混淆的最小部分是用例图不是用例

用例是文档,而不是图表。例如,上面的图表可能来自以下用例文本:

  • 客户查看帐户详细信息
  • 扩展名:
    1a。如果客户点击“未结订单”链接
    客户查看未结订单
    1b。如果客户端单击“查看历史记录”链接
    客户端视图历史记录

    在更详细的模型中,这些“扩展点”将列在图表上的“查看帐户详细信息”用例元素上。但在我看来,这把图表弄得乱七八糟

    我第一次真正学习UML是通过阅读Martin Fowler的“UML蒸馏”。在发布这个答案之前,我刚刚检查了那本书,发现Fowler建议忽略

    UML没有使用术语“扩展/扩展”。相反,它使用术语“概括/概括”;人们也经常把它称为“继承”

    如果B是a的泛化(即a继承自B),则a是B的子集。从“is-a”关系中可以清楚地看出:如果每个a都是B,则a显然是B的子集。在您的术语中,如果a扩展了B,则a是B的子集


    类型是谓词:对于每个对象,可以确定它是否属于谓词。扩展谓词的意思是使其更具限制性。

    哦,这似乎是对“扩展”的误解。另一个例子,如果理论B基于理论A,但涵盖更多,我们说理论B(动词)理论A。这里的动词是什么,似乎不是“扩展”,对吗?对不起,英语不是我的母语。UML对“扩展”的定义意味着,如果理论B扩展了理论A,它将描述一些边缘情况,带有附加条件和结论,而不是更一般。然而,我能理解你的观点,这有点令人困惑。@maciejkow,你的意思是动词应该是“泛化”。我想知道,对于以英语为母语的人来说,这有点困惑吗?或者更具体地说,“泛化”和“延伸”?或者这两个词的方向完全不同?如果a延伸了B,那么a是B的子集。但是如果a延伸了B,那么B是A的子集,对吗?你的例子是可以的,如果有点弱的话。我建议“客户赠送优惠券”作为一个更好的扩展示例。它是一种独特的行为,与主要用例相关,在其流程的某一点上,但仅在某些情况下。“使饭菜丰盛”实际上只是“使饭菜丰盛”的更多意思。不,在英语中,“延伸”的意思是“使更进一步”。这与特异性无关。有人可能会说,“时间很艰难。我们需要进一步扩展我们的薪酬”。术语extend用于用例图的上下文中。正如您所说:扩展谓词意味着使其更具限制性。所以“extend”类似于“specialize”,对吗?我不认为这是OP的意思。为什么在提到用例时会使用“subset”这个词?另见同一作者。@Shore:人们在表示“专门化”时经常使用“扩展”一词,对吗?特别是在Java中,“扩展”是关键字的名称。噢,谢谢。看来我被翻译误导了。我将删除另一篇文章。是的,但这些术语也不同。您在用例中使用extend,在类中使用specialization。噢,再次感谢您。最后,我想知道的是,“扩展”是否类似于“专门化”,而没有UML的上下文?@Shore:重读约翰·桑德斯的整个帖子。不,在UML中,术语“扩展”没有被使用,除了作为用例的原型。特别是,在UML中,“扩展”与类无关。用例不是UML的一部分吗?你为什么说“扩展”除了用例之外不在UML中使用?@Shore:当然,用例是UML的一部分。我仍然不知道您是指用例,还是指类,还是指您问题中的其他内容。也许这个问题的措辞令人困惑。