<<extend>>与<<include>>
<<include>> 关系允许将被包含用例中的公共行为分解出来。
<<extend>> 关系通过在特定的扩展点激活另一个用例来扩展一个用例的行为,从而提供了一种可控的扩展形式。
<<include>> 与 <<extend>> 关系的不同点在于“被包含”用例对“激活”用例的完成来说是必需的。
实例分析
上图是一个大学注册系统的高层用例图,该模型包含了4个参与者和4个用例。每一个用例由一个参与者启动,是一个完整的、外部可见的和正交的功能。除了 Student 以外,所有的参与者都是启动者。Student 首先获取考试结果和注册指导,然后才能输入和验证下学期的学习计划。
用例 Provide examination results 可以 <<extend>> 用例 Provide enrolment instructions,但前者并不总是扩展后者。例如,对新生来说,考试结果还是未知的。这就是用 <<extend>> 构建扩展型,而不是用 <<include>> 来为这个关系建模的原因。
从用例 Enter program of study 到用例 Validate program of study 建立了 <<include>> 关系,这个 <<include>> 关系表明前者总是包含后者,每当输入学习计划时,都要验证是否存在时间冲突和特殊的批准等。