请输入您要查询的百科知识:

 

词条 扩展关系
释义

中科永联高级技术培训中心(www.itisedu.com)

扩展关系是从扩展用例到基本用例的关系,它说明为扩展用例定义的行为如何插入到为基本用例定义的行为中。它是以隐含形式插入的,也就是说,扩展用例并不在基本用例中显示。

扩展关系将扩展用例与基本用例连接了起来。通过在基本用例中引用扩展点,可以定义在基本用例的哪些位置插入扩展用例(有关扩展点的讨论,请参见指南:用例)。扩展用例通常是抽象的,但并不必须如此。

您可以出于以下几个目的使用扩展用例:

表明用例的某一部分是可选(或可能可选)的系统行为。这样,您就可以将模型中的可选行为和必选行为分开。

表明只在特定条件(有时是例外条件)下才执行分支流,如触发警报。

表明可能有一组行为段,其中的一个或多个段可以在基本用例中的扩展点处插入。所插入的行为段(以及插入的顺序)将取决于在执行基本用例时与主角进行的交互。

扩展是有条件的,它是否执行取决于在执行基本用例时所发生的事件。基本用例并不控制执行扩展的条件:这些条件在扩展关系中进行说明。扩展用例可以访问和修改基本用例的属性。但基本用例看不到扩展用例,也无法访问它们的属性。

扩展用例以隐含的方式修改基本用例。也可以说,基本用例定义了可以在其中添加扩展用例的模块化框架,但基本用例看不见特定的扩展用例。

基本用例自身应是完整的,即基本用例应该是可理解且有意义的,而不必引用任何扩展用例。但基本用例并不独立于扩展用例,因为如果无法遵循扩展用例,就不能执行基本用例。

示例:

用例“召开电话会议”和“显示呼叫方身份”是基本用例“打电话”的两个扩展用例。

在电话系统中,为用户提供的主要服务通过用例“打电话”来表示。可选服务的示例包括:

能让第三方加入通话(召开电话会议)。

允许接收方看到呼叫方的身份(显示呼叫方身份)。

我们可以将这些可选服务所需的行为表示为基本用例“打电话”的扩展用例。这是扩展关系的一种正确应用:由于“打电话”本身就具有意义,您无需阅读扩展用例的说明就可理解基本用例的主要目的,并且扩展用例具有可选字符。

如果基本用例和“基本加扩展”用例都必须是可以直接实例化的,或者如果您希望通过添加来修改基本用例中的行为,则应使用用例泛化关系(请参见指南:用例泛化关系)。

扩展用例可以包含一个或多个插入段,每个插入段都可以有内置的备选路径。这些插入段以递增方式修改基本用例的行为。扩展用例中的每个插入段可以插入到基本用例中的不同位置。这意味着扩展关系包括一系列对扩展点的引用,引用的数量与扩展用例中插入段的数量相等。每个扩展点都必须在基本用例中定义。

一个基本用例包含若干扩展关系,这意味着一个用例实例在其生命期内可以遵循多个扩展用例。一个扩展用例可以扩展到几个基本用例中,但这并不意味着这些基本用例之间存在依赖关系。同一个扩展用例和同一个基本用例之间甚至可以有多个扩展关系,前提是扩展用例必须在基本用例的不同位置插入。这意味着不同的扩展关系需要引用基本用例中的不同扩展点。扩展用例自身可以是扩展、包含或泛化关系中的基本用例。例如,扩展用例能够以嵌套方式扩展其他的扩展用例。

一、执行扩展

当执行基本用例的用例实例达到基本用例中定义扩展点的位置时,将对相应扩展关系的条件进行评估。如果条件成立,或者如果没有条件,用例实例将遵循扩展用例(或者扩展用例中与扩展点相对应的插入段)。如果扩展关系的条件不成立,就不执行扩展。

就象所有用例一样,扩展用例可以有基本事件流和备选事件流(有关事件流结构的讨论,请参见指南:用例)。用例实例通过扩展到底会采取哪条路径,这不仅取决于在执行之前发生的事件(用例实例的状态),而且还取决于执行扩展时在与主角的交互中发生的事件。用例实例一旦执行了扩展,它就会在基本用例的中断点处继续执行基本用例。

遵循一个基本用例及其扩展用例的用例实例。

一个扩展用例可以有多个插入段,每个插入段都与自己在基本用例中的扩展点相关。在这种情况下,用例实例将继续执行基本用例,并持续到扩展关系中指定的下一个扩展点为止。在此点上,它将执行扩展用例的下一个插入段。这会重复进行,直到执行完最后一个插入段为止。请注意,只在第一个扩展点对扩展关系的条件进行检查;如果条件成立,用例实例就必须执行所有插入段。

遵循一个基本用例和一个扩展用例(后者具有两个插入段)的用例实例。

扩展关系的多重性将约束整个扩展用例可以重复发生的次数。请注意,所重复(并受多重性限制)的是整个扩展用例,而不仅仅是一个插入段。

二、记录扩展关系

按照基本用例的属性来说明扩展的条件。另外,您也可以选择省略该条件,在这种情况下,扩展将总会被执行。

每一扩展关系都有一系列对基本用例中扩展点(一个或多个)的引用。扩展点是按名称引用的。如果扩展用例具有多个插入段,您就需要指定哪个段与哪个扩展点相对应。另外,您还需要说明形成各个插入段的扩展用例步骤或分支流。

示例:

在电话系统中,可以由抽象的用例“显示呼叫方身份”来扩展用例“打电话”。这是一项可选服务,通常称为“呼叫方 ID”,接收方可能已请求该服务,也可能还未请求。可能会如下说明从“显示呼叫方身份”到“打电话”的扩展关系:

条件:接收方必须已经预定“呼叫方 ID”服务。

扩展点:显示身份 - 插入整个用例。

您可以向扩展关系赋予多重性,如果省略多重性,则假定多重性为一。

三、使用示例

请考虑下面的一个简单电话系统:

抽象用例“召开电话会议”是用例“打电话”的扩展用例。

在这一模型(对普通电话系统的简单表示)中,基本呼叫服务在用例“打电话”中说明。对基本事件流的分步概述如下:

1 呼叫方拿起听筒。

2 系统发出拨号音。

3 呼叫方拨打一位数字。

4 系统结束拨号音。

5 呼叫方输入电话号码的其余数字。

6 系统对数字进行分析,确定接收方的网络地址。

7 系统对数字进行分析,确定接收方在网络中所处的位置。

8 然后,系统确定是否可以与接收方建立虚拟通路。

9 如果可以建立虚拟通路,系统就使接收方的电话振铃,并在呼叫方的电话上发出振铃音。

10 当接收方接听电话时,系统就停止呼叫方电话上的振铃音,并使接收方的电话停止振铃,这样便建立了虚拟通路。

11 系统开始进行话费记录,记录呼叫的开始时间、呼叫的结束点以及呼叫方的客户信息。

12 通话继续一段时间。当呼叫方或接收方断开与呼叫的连接时,系统就会记录呼叫的结束时间,并释放支持该虚拟通路所需的全部资源。该用例随即结束。

如果要在此系统中添加一项功能,以允许呼叫方或接收方将第三方连入呼叫中(通常称为“电话会议”),我们就需要向事件流添加行为。一种可选方法,也是我们应首先考虑的方法是,将差异部分直接放入“打电话”中。我们可以使用备选事件流建立这些差异部分的模型,如指南:用例中所述。这种解决方案适用于最简单的添加,因为在这些情况下,所添加的功能不会使用例的原义变得混乱或模糊。另一种可选方法是将差异部分分散到名为“召开电话会议”的抽象扩展用例中,该用例扩展了基本用例。

© 1987 - 2001 Rational Software Corporation。版权所有。

随便看

 

百科全书收录594082条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2024/9/21 20:52:11