
用例扩展关系.doc
5页1.1指南:扩展关系«exte nd»扩展关系是从扩展用例到基本用例的关系,它说明 为扩展用例定义的行为如何插入到为基本用例定 义的行为中它是以隐含形式插入的,也就是说, 扩展用例并不在基本用例中显示扩展关系主题解释执行扩展 记录扩展关系 使用示例1.1.1 解释, 扩展关系将扩展用例与基本用例连接了起来通过在基本用例中引用扩展点,可 以定义在基本用例的哪些位置插入扩展用例(有关扩展点的讨论,请参见指區 用例)扩展用例通常是抽象的,但并不必须如此您可以出于以下几个目的使用扩展用例:表明用例的某一部分是可选(或可能可选)的系统行为这样,您就可以将模型中的可选行为和必选行为分开表明只在特定条件(有时是例外条件)下才执行分支流,如触发警报表明可能有一组行为段,其中的一个或多个段可以在基本用例中的扩展点处插入所插入的行为段(以及插入的顺序)将取决于在执行基本用例时与主角进行的交互扩展是有条件的,它是否执行取决于在执行基本用例时所发生的事件基本用例 并不控制执行扩展的条件:这些条件在扩展关系中进行说明扩展用例可以访问 和修改基本用例的属性但基本用例看不到扩展用例,也无法访问它们的属性扩展用例以隐含的方式修改基本用例。
也可以说,基本用例定义了可以在其中添 加扩展用例的模块化框架,但基本用例看不见特定的扩展用例基本用例自身应是完整的,即基本用例应该是可理解且有意义的,而不必引用任 何扩展用例但基本用例并不独立于扩展用例,因为如果无法遵循扩展用例,就 不能执行基本用例示例:用例“召开会议”和“显示呼叫方身份”是基本用例“打”的两个扩展用例在系统中,为用户提供的主要服务通过用例“打”来表 示可选服务的示例包括:•能让第三方加入通话(召开会议)•允许接收方看到呼叫方的身份(显示呼叫方身份)我们可以将这些可选服务所需的行为表示为基本用例“打” 的扩展用例这是扩展关系的一种正确应用:由于“打”本身 就具有意义,您无需阅读扩展用例的说明就可理解基本用例的主要 目的,并且扩展用例具有可选字符如果基本用例和“基本加扩展”用例都必须是可以直接实例化的,或者如果您希 望通过添加来修改基本用例中的行为,则应使用用例泛化关系(请参见指南:用 例泛化关系)扩展用例可以包含一个或多个插入段,每个插入段都可以有内置的备选路径这 些插入段以递增方式修改基本用例的行为扩展用例中的每个插入段可以插入到 基本用例中的不同位置这意味着扩展关系包括一系列对扩展点的引用,引用的 数量与扩展用例中插入段的数量相等。
每个扩展点都必须在基本用例中定义一个基本用例包含若干扩展关系,这意味着一个用例实例在其生命期内可以遵循 多个扩展用例一个扩展用例可以扩展到几个基本用例中,但这并不意味着这些 基本用例之间存在依赖关系同一个扩展用例和同一个基本用例之间甚至可以有 多个扩展关系,前提是扩展用例必须在基本用例的不同位置插入这意味着不同 的扩展关系需要引用基本用例中的不同扩展点扩展用例自身可以是扩展、包含 或泛化关系中的基本用例例如,扩展用例能够以嵌套方式扩展其他的扩展用例1.1.2 执行扩展— 当执行基本用例的用例实例达到基本用例中定义扩展点的位置时,将对相应扩展关系的条件进行评估如果条件成立,或者如果没有条件,用例实例将遵循扩展用例(或者扩展用例中与扩展点相对应的插入段)如果扩展关系的条件不成立, 就不执行扩展就象所有用例一样,扩展用例可以有基本事件流和备选事件流(有关事件流结构 的讨论,请参见指南:用例)用例实例通过扩展到底会采取哪条路径,这不仅 取决于在执行之前发生的事件(用例实例的状态),而且还取决于执行扩展时在 与主角的交互中发生的事件用例实例一旦执行了扩展,它就会在基本用例的中 断点处继续执行基本用例。
遵循一个基本用例及其扩展用例的用例实例一个扩展用例可以有多个插入段,每个插入段都与自己在基本用例中的扩展点相 关在这种情况下,用例实例将继续执行基本用例,并持续到扩展关系中指定的 下一个扩展点为止在此点上,它将执行扩展用例的下一个插入段这会重复进 行,直到执行完最后一个插入段为止请注意,只在第一个扩展点对扩展关系的 条件进行检查;如果条件成立,用例实例就必须执行所有插入段遵循一个基本用例和一个扩展用例(后者具有两个插入段)的用例实例扩展关系的多重性将约束整个扩展用例可以重复发生的次数请注意,所重复(并受多重性限制)的是整个扩展用例,而不仅仅是一个插入段1.1.3 记录扩展关系 — 按照基本用例的属性来说明扩展的条件另外,您也可以选择省略该条件,在这 种情况下,扩展将总会被执行每一扩展关系都有一系列对基本用例中扩展点(一个或多个)的引用扩展点是 按名称引用的如果扩展用例具有多个插入段,您就需要指定哪个段与哪个扩展 点相对应另外,您还需要说明形成各个插入段的扩展用例步骤或分支流示例:在系统中,可以由抽象的用例“显示呼叫方身份”来扩展用例“打”这是一项可选服务,通常称为“呼叫方ID”,接收方可能已请求该服务,也可能还未请求。
可能会如下说明从“显示呼叫方身份”到“打”的扩展关系:条件:接收方必须已经预定“呼叫方ID”服务扩展点:显示身份 - 插入整个用例您可以向扩展关系赋予多重性,如果省略多重性,则假定多重性为一1.1.4 使用示例, 请考虑下面的一个简单系统:抽象用例“召开会议”是用例“打”的扩展用例在这一模型(对普通系统的简单表示)中,基本呼叫服务在用例“打” 中说明对基本事件流的分步概述如下:1. 呼叫方拿起听筒2. 系统发出拨号音3. 呼叫方拨打一位数字4. 系统结束拨号音5. 呼叫方输入号码的其余数字6. 系统对数字进行分析,确定接收方的网络地址7. 系统对数字进行分析,确定接收方在网络中所处的位置8. 然后,系统确定是否可以与接收方建立虚拟通路9. 如果可以建立虚拟通路,系统就使接收方的振铃,并在呼叫方的上发出振 铃音10. 当接收方接听时,系统就停止呼叫方上的振铃音,并使接收方的停止 振铃,这样便建立了虚拟通路11. 系统开始进行话费记录,记录呼叫的开始时间、呼叫的结束点以及呼叫方的客户信 息12. 通话继续一段时间当呼叫方或接收方断开与呼叫的连接时,系统就会记录呼叫的 结束时间,并释放支持该虚拟通路所需的全部资源。
该用例随即结束如果要在此系统中添加一项功能,以允许呼叫方或接收方将第三方连入呼叫中 (通常称为“会议”),我们就需要向事件流添加行为一种可选方法,也 是我们应首先考虑的方法是,将差异部分直接放入“打”中我们可以使用 备选事件流建立这些差异部分的模型,如指南:用例中所述这种解决方案适用 于最简单的添加,因为在这些情况下,所添加的功能不会使用例的原义变得混乱 或模糊另一种可选方法是将差异部分分散到名为“召开会议”的抽象扩展 用例中,该用例扩展了基本用例。












