阅读有关UML的书,我不明白以下内容:
--------include---> Add new manufacturer
Servoce Assistant---Add new product
<--------extend----Add new product type
我只是不明白。如果还有未知的制造商,则使用附带的案例添加制造商。但如果它还是未知类型,还有延伸吗?这对我没有任何意义。如果只能从不同的地方调用添加制造商,但仅为该情况存在添加新产品类型,这是有意义的。这是对的吗? 谢谢!
答案 0 :(得分:5)
以下解释可能有助于澄清用例图上的“扩展”和“包含”关系:
包含:包括用例调用或调用包含的用例。 包含用于显示如何使用 案件分成小步骤。该 包括用例在箭头 结束。
扩展:扩展用例会为扩展使用添加目标和步骤 案件。扩展仅运行 在一定条件下。扩展 用例位于箭头末端。
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用例扩展。