考虑包含 UC2 和 UC3 的用例 UC1。 UML 2.5.1 规范定义了两个用例之间的
«include»
:
Include 是两个 UseCase 之间的 DirectedRelationship,表示包含的 UseCase(添加)的行为插入到包含的 UseCase(包含的 Case)的行为中。
(...)
包含的用例的所有行为在包含的用例中的单个位置执行之前恢复包含的用例的执行。
我理解,考虑到包含定义的肯定措辞,UC2和UC3的行为总是与UC1一起执行,这意味着系统性并且没有条件性的余地(“被插入”,“被执行”),而扩展定义明确提到了一种非强制性的可能性(“可以插入”、“应该添加的行为,可能有条件地”,另请参阅规范中有关 CAN 和 MAY 使用的第 5.1 节)。
我想知道我的解释是否太严格了。包含也是如此:
有两种可能的场景,其中包含的用例的行为未执行:
假设UC1有前提条件用户必须经过身份验证,并且用户尚未经过身份验证。在这种情况下,UC1 将不会执行。
规范提到了执行所包含用例的单个位置。现在我们都知道,用例不一定遵循单个步骤序列。尽管 UML 规范中没有明确提及用例场景,但通常有一个 main 场景,并且可能有许多 alternate 和 exception 场景。
根据具体情况,用例中的某些或步骤将无法到达,可能是因为遵循了备用场景路径,或者可能是因为包含位置位于未遵循此执行的异常路径中。
在这些情况下,我认为完全符合规范,所包含的用例仅在某些条件下执行(即实际达到该执行点)
在这个场景示例中,用例更新预订表示为活动图,我们看到我们只需要在替代场景取消预订中执行用例更新库存
这可以在 UML 规范中表达得更清楚。