UML中的<extend>依赖</extend>

时间:2009-07-25 19:57:05

标签: uml extend

除UML的上下文外,如果A扩展B,则B是A的子集。

但是在UML中,它是相反的,比方说,如果A扩展B,那么A是B的子集,

为什么这么奇怪?

3 个答案:

答案 0 :(得分:6)

<<extend>>依赖项仅用于用例。这意味着在某些情况下,一个用例扩展了另一个用例。在以下内容中:

Extends Use Case

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

这与泛化/专业化无关。


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

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

  1. 客户端查看帐户详细信息。
  2. 扩展:
    1A。如果客户点击“未结订单”链接
        客户查看未结订单
    1B。如果客户点击“查看历史记录”链接
        客户查看历史记录

    在更详细的模型中,这些“扩展点”将列在图表上的“查看帐户详细信息”用例元素中。但在我看来,这种情况非常混乱。

    我首先真的通过阅读Martin Fowler的“UML Distilled”来学习UML。我在发布这个答案之前检查了那本书,发现福勒建议忽略<<extend>>

答案 1 :(得分:1)

根据用例来写它(我相信这是你想要的背景 - 如果不是,请纠正我),以免想到在你最喜欢的快餐店订餐。

基本用例是订餐,但如果您出示折扣优惠券可以延长。每次你去这个使用cale,你得到一顿饭,但只有在特殊情况下,你支付的费用通常少于(或获得额外的三明治)。

我在这里找到了一个很好的例子:http://www.agilemodeling.com/essays/useCaseReuse.htm。您可以看到国际学生的注册包括额外的安全检查,并且仅适用于部分注册。希望这会有所帮助。

答案 2 :(得分:-2)

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

如果B是A的推广(即A继承自B),则A是B的子集。这应该从“is-a”关系变得清晰:如果每个A都是B,则A清楚B的子集。在您的术语中,如果A扩展B,则A是B的子集。

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