在用例图中包含和扩展之间的区别是什么?
当前回答
我经常用这个来记住这两点:
我的用例:我要去城市。
包括->驾驶汽车
Extends ->填充汽油
“加油”不一定总是被要求,但也可以根据车里剩余的汽油量来选择。“开车”是一个先决条件,所以我把它包括在内。
其他回答
用例用于记录行为,例如回答这个问题。
一种行为延伸了另一种行为,如果它是行为的补充,但不一定是行为的一部分,例如研究答案。
还要注意的是,如果你不试图回答这个问题,研究答案也没有多大意义。
如果一个行为是包含行为的一部分,则该行为被包含在另一个行为中,例如登录到堆栈交换。
为了澄清,只有当你想在堆栈溢出中回答这个问题时,这个例子才成立。
这些是UML 2.5第671-672页的技术定义。
我强调了我认为重要的几点。
扩展
扩展是一个从扩展UseCase(扩展)到扩展UseCase (extendedCase)的关系 如何以及何时将扩展UseCase中定义的行为插入到扩展UseCase中定义的行为中。 扩展发生在扩展的UseCase中定义的一个或多个特定扩展点上。
当有一些额外的行为应该被添加到行为中时(可能是有条件的)使用Extend 定义在一个或多个用例中。
扩展的UseCase的定义独立于扩展的UseCase,并且具有独立于扩展的意义 UseCase。另一方面,扩展的UseCase通常定义了本身不一定有意义的行为。 相反,扩展的UseCase定义了一组模块化行为增量,以增加扩展UseCase的执行 在特定条件下。
...
包括
Include is a DirectedRelationship between two UseCases, indicating that the behavior of the included UseCase (the addition) is inserted into the behavior of the including UseCase (the includingCase). It is also a kind of NamedElement so that it can have a name in the context of its owning UseCase (the includingCase). The including UseCase may depend on the changes produced by executing the included UseCase. The included UseCase must be available for the behavior of the including UseCase to be completely described.
The Include relationship is intended to be used when there are common parts of the behavior of two or more UseCases. This common part is then extracted to a separate UseCase, to be included by all the base UseCases having this part in common. As the primary use of the Include relationship is for reuse of common parts, what is left in a base UseCase is usually not complete in itself but dependent on the included parts to be meaningful. This is reflected in the direction of the relationship, indicating that the base UseCase depends on the addition but not vice versa.
...
为了简化,
为包括
当基本用例执行时,包含的用例将每次执行一次。 基本用例需要完成所包含的用例才能完成。
一个典型的例子:在登录和验证密码之间
(登录)——<< include >>——>(验证密码)
为了使登录过程成功,“验证密码”也必须成功。
为扩展
当基本用例被执行时,扩展用例只是偶尔执行 扩展用例仅在满足某些条件时才会发生。
一个典型的例子:在登录和显示错误消息之间(只偶尔发生)
(登录 ) <--- << 扩展> >——(显示错误消息)
“show error message”只在登录过程失败时才会出现。
我不建议用这个来记住这两点:
我的用例:我要去城市。
包括->驾驶汽车
Extends ->填充汽油
我宁愿你用: 我的用例:我要去城市。
Extends ->驾驶汽车
包括->加油
扩展关系延续了基类的行为。基类功能必须在那里。 另一方面,包含关系类似于可能被调用的函数。梅是粗体字。
这可以从 用例模型中的重用
我认为理解includes和extends的意图很重要:
“包含关系旨在重用已建模的行为 通过另一个用例,而扩展关系是为 向现有的用例中添加部件,以及为可选的系统服务建模”(Overgaard和Palmkvist,用例:模式和蓝图。addison - wesley, 2004)。
在我看来,这是:
包含=功能的重用(即所包含的功能在系统的其他地方被使用或可能被使用)。因此Include表示对另一个用例的依赖。
Extends =添加(而不是重用)功能和任何可选功能。因此,Extends可以表示以下两种情况之一: 1. 向用例中添加新特性/功能(可选或非可选) 2. 任何可选的用例(是否存在)。
简介: 包含=功能的重用 Extends =新的和/或可选的功能
您将经常发现扩展的第二种用法(即可选功能),因为如果功能不是可选的,那么大多数情况下它被内置到用例本身,而不是作为一个扩展。至少这是我的经验。(Julian C指出,当项目进入第二阶段时,你有时会看到扩展的第一次使用(即添加新功能)。
当一个用例有先决条件时,就使用include。
对于有身份验证的用例,最坏的情况,或者是可选的,然后选择extend..
示例:用于寻求入场、预约、机票预订的用例 您必须填写一份表格(注册或反馈表)....这就是包容的由来。
例如:对于验证登录或登录您的帐户的用例,您的身份验证是必须的。还要考虑最坏的情况。比如按时还书,没有预定,逾期付款,这就是延期发挥作用的地方。
不要在图中过度使用include和extend。
保持简单,傻瓜!!