关于UML扩展/包含的问题来自Book Example

时间:2010-01-30 15:33:23

标签: uml use-case

阅读有关UML的书,我不明白以下内容:

                                      --------include---> Add new manufacturer
  Servoce Assistant---Add new product
                                     <--------extend----Add new product type    

我只是不明白。如果还有未知的制造商,则使用附带的案例添加制造商。但如果它还是未知类型,还有延伸吗?这对我没有任何意义。如果只能从不同的地方调用添加制造商,但仅为该情况存在添加新产品类型,这是有意义的。这是对的吗? 谢谢!

4 个答案:

答案 0 :(得分:5)

以下解释可能有助于澄清用例图上的“扩展”和“包含”关系:

  

包含:包括用例调用或调用包含的用例。   包含用于显示如何使用   案件分成小步骤。该   包括用例在箭头   结束。

     

扩展:扩展用例会为扩展使用添加目标和步骤   案件。扩展仅运行   在一定条件下。扩展   用例位于箭头末端。

Include and Extend relationships on a use case diagram http://i.msdn.microsoft.com/Dd409427.UML_UCOvStructure(en-us,VS.100).png

UML用例图:参考,位于http://msdn.microsoft.com/en-us/library/dd409427%28VS.100%29.aspx

答案 1 :(得分:1)

  

如果还有未知的制造商,则使用附带的案例添加制造商。   但如果它还是未知类型,还有延伸吗?这对我没有任何意义。

我也不完全确定这对我有意义。

UML2规范说明了include(第16.3.5节):

  

两个用例之间的包含关系意味着包含用例中定义的行为包含在   基本用例的行为。包含关系旨在用于有共同部分时   两个或多个用例的行为。然后将这个公共部分提取到一个单独的用例中,供所有人使用   具有该部分的基本用例。由于包含关系的主要用途是重复使用公共部分,   基本用例中剩下的内容通常本身并不完整,但依赖于包含的部分才有意义。这个   反映在关系的方向上,表明基本用例取决于添加而不是副   反之亦然。

     

包含的用例的执行类似于子例程调用。包含的用例的所有行为都是   在恢复执行包含用例之前,在包含的用例中的单个位置执行。

     

...

     

请注意,包含的用例不是可选的,并且包含用例始终需要正确执行。

延伸(第16.3.3节):

  
    

此关系指定用例的行为可能会被另一个用户的行为扩展(通常是     补充)用例。扩展发生在扩展使用中定义的一个或多个特定扩展点     案件。但请注意,扩展用例的定义与扩展用例无关,并且有意义     独立于扩展用例。另一方面,扩展用例通常定义可能的行为     不一定是有意义的。相反,扩展用例定义了一组模块化行为增量     在特定条件下扩充执行扩展用例。

  
     

...

     

如果在执行期间达到第一个扩展点时扩展条件为真   扩展用例,然后还将执行扩展用例的所有适当行为片段。如果   条件为假,不会发生扩展。

用例是用OOD语言查找的过程性事物。包括子程序调用。扩展是可选的过程,如条件逻辑或template method pattern,其中main方法可能会或可能不会调用更具体的实现。

由于用例是分类器,因此您可以在类之间使用相同的泛化关系来表示泛化。扩展和包含表示可选和必需的子行为。

  

如果只能从不同的地方调用添加制造商,但仅针对该情况存在添加新产品类型,这是有意义的。这是对的吗?谢谢!

它表示无论何时添加产品,您总是添加新的制造商,有时您可能会添加新的产品类别。它没有说明是否从其他地方调用任何用例,尽管通常情况下你只会拆分包含的用例。鉴于现实世界的制造商生产不同的产品,它可能是一个非常糟糕的例子。

答案 2 :(得分:0)

首先,您需要在此处为​​人们提供一些背景信息。您正在使用用例图。其次,我通常远离UML扩展;但我会试一试。 “Include”用于模块化用例。例如,“用户登录”被大量使用,并且更容易“包含”而不是写出它所处的每个用例中的步骤。“Extend”试图使用用例的泛化/继承,但我不喜欢我认为它非常好用。这是一个例子,“添加老虎”扩展“添加动物”。再说一遍,我会留下“延伸”。

答案 3 :(得分:0)

Tomas,你的意思是 extension points 而不是扩展课程吗?

将LWoodyiii的示例与Login一起使用,您将拥有使用场景,其中一切工作都是完美的起点,然后您将扩展添加到用例中,其中场景可能出错?

那里有很多examples,只是google用于 uml用例扩展