正确理解扩展关系和扩展点

原创 2004年04月07日 22:23:00

    在编写用例时,很多人搞不清扩展和扩展点的概念,我也曾为此头痛,经过一段时间摸索才搞明白,所以写了这篇短文与大家共享。

    用例可以扩展(extend)一个已经存在的用例。在扩展用例中,扩展发生在一个特定的点上,被称为扩展点(extension point)。可以把扩展看作是在某一特定情况下将额外的描述文本在扩展点上插入被扩展用例中。扩展主要用来简化复杂的事件流,以表示可选择的行为或处理例外情况。使用扩展建模可以使基本用例更易于理解,使用例模型更易于维护。(摘自《统一软件开发过程引论》P83)
    下面是一个使用了扩展点的用例示范(摘自《有效用例模式》P186~187):
用例7.5 “预订航班”用例
预订航班
1. 当代理人为客户指定旅行路线时,用例开始。
2. 系统搜索一组符合条件的航班,并将他们提供给代理人。
   (飞行常客a)
3. 代理人选择“选择航班”。
4. 系统验证航班上还有座位并预约座位。
   (飞行常客b)
5. 代理人提供支付信息,结束预订。
   (飞行常客c)
6. 系统预订座位并出票。
分支
4a 在选择的票类中没有座位可以提供:
   4a1. 系统通知代理人,在客户选择的票价类别中没有座位可以提供。
   4a2. 代理人指定另一种价格偏好。
4b 没有座位可以提供(航班已满):
   4b1. 系统通知代理人根本没有座位提供。
   4b2. 代理人指定另一组客户的起飞时间偏好。
   (飞行常客d)

用例7.6 “为飞行常客预订航班”用例
为飞行常客预订航班
扩展“预订航班”
飞行常客a
1. 系统检索客户的资料,并显示根据客户的航线偏好进行分类的航班。
飞行常客b
1. 系统为客户提供头等座位。
飞行常客c
1. 系统验证客户已经升级了其账号中的优惠券
2. 系统把客户列入航班升级清单。
分支
没有座位可以提供
飞行常客d
1. 代理人将客户放在一个座位等待优先级清单上。

    RUP的用例规约(Use Case Specification)模板同时具有备选流(Alternative Flows)和扩展点(Extension Points),如下:
2.2 Alternative Flows
2.2.1 < First Alternative Flow >
    [More complex alternatives should be described in a separate section, which is referred to in the Basic Flow subsection of Flow of Events section.  Think of the Alternative Flow subsections like alternative behavior-each alternative flow represents alternative behavior, many times because of exceptions that occur in the main flow.  They may be as long as necessary to describe the events associated with the alternative behavior.  When an alternative flow ends, the events of the main flow of events are resumed unless otherwise stated.]
2.2.1.1 < An Alternative Sub-flow >
    [Alternative flows may, in turn, be broken down into subsections if it improves clarity.]
2.2.2 < Second Alternative Flow >
    [There may be, and most likely will be, a number of alternative flows in a use case.  Keep each alternative separate to improve clarity.  Using alternative flows improves the readability of the use case, as well as preventing use cases from being decomposed into hierarchies of use cases.     Keep in mind that use cases are just textual descriptions, and their main purpose is to document the behavior of a system in a clear, concise, and understandable way.]

6. Extension Points
    [Extension points of the use case.]
6.1 <Name of Extension Point>
    [Definition of the location of the extension point in the flow of events.]
    根据上面所给出的扩展和扩展点的定义,对照用例示范,不难得知:RUP模板中备选流对应用例示范的分支,扩展点是用例示范中扩展点的集中描述。依据模板注释我们可以将用例示范改写成:
用例7.5 “预订航班”用例
预订航班
1. 当代理人为客户指定旅行路线时,用例开始。
2. 系统搜索一组符合条件的航班,并将他们提供给代理人。
3. 代理人选择“选择航班”。
4. 系统验证航班上还有座位并预约座位。
5. 代理人提供支付信息,结束预订。
6. 系统预订座位并出票。
备选流
4a 在选择的票类中没有座位可以提供:
   4a1. 系统通知代理人,在客户选择的票价类别中没有座位可以提供。
   4a2. 代理人指定另一种价格偏好。
4b 没有座位可以提供(航班已满):
   4b1. 系统通知代理人根本没有座位提供。
   4b2. 代理人指定另一组客户的起飞时间偏好。
扩展点
1. 飞行常客
   用例7.6 “为飞行常客预订航班”

    需要注意的是,有一个扩展点就一定有一个扩展用例与之对应。
    总之,备选流和扩展点都是用于表示可选择的行为或处理例外情况,在一些用例描述模板中此二者是放在一起的,而在RUP模板中把它们分开。为什么要分开呢?原因是扩展不同于一般意义上的可选择的行为或处理例外情况,当分支动作路径中断了一个场景中的大量步骤时,创建一个扩展用例是合适的,这就是InterruptAsExtension用例模式。

UML——用例图的扩展和包含关系

用例图(Use Case Diagram)是从用户的角度描述系统的功能,并指出各功能的操作者,主要作用有3个:获取需求、指导测试、在整个过程中的其他工作流中期指导作用。用例元素包括参与者和用例,用例间...
  • u013046097
  • u013046097
  • 2014年11月30日 21:21
  • 3017

关于插件开发扩展和扩展点的理解和思考

背景: 一个大的产品是由很多的插件构成。插件间的相互协作是必不可少的。 相互协作的典型方式是依赖,A依赖B,A就可以使用B中开放的包中的类了。(这种方式的优缺暂不讨论) 通过扩展扩展点的方式...
  • weiweiwei256
  • weiweiwei256
  • 2016年01月05日 14:14
  • 1317

包含、扩展、泛化的区别

包含include(常用语用例图中) 形式:           A《include》>b 箭头指向: A基础用例 指向 B抽象用例(即父类指向子类) A、B区别:当多个用例中用到多个相同的事件流时...
  • wrs120
  • wrs120
  • 2016年10月17日 15:59
  • 833

用例包含关系与用例扩展关系的区别

 包含关系:通常是指一个大的用例包含了几个小的用例,几个小的用例组成一个大的用例; 扩展关系:两个独立的用例,完成一个后可以开启另一个,两个用例本身都是独立的。 例如:用户管理的用例包括用户添加和用户...
  • lcj8
  • lcj8
  • 2008年09月21日 12:46
  • 3700

用例图中的三种关系包含、扩展、泛化

用例图使用户 与开发人员交流的一种重要的方式,是对用户需求的一种描述。开发人员从用户的角度整体上理解系统的功能。 用例图主要有三种元素:参与者(Actor),用例,以及用例图中对...
  • lxy344x
  • lxy344x
  • 2014年10月21日 21:53
  • 11249

教你怎样扩展Eclipse的扩展点(一)

  现在手头上做的基于Eclipse RCP的上海佳吉快运第三代运营系统的项目也快接近尾声了,经历一个项目从设计开发到马上完成的过程,也从中向同事们学到了很多的东西,所以今天我想将项目中用到的一些技术...
  • vwpolo
  • vwpolo
  • 2008年02月13日 18:13
  • 2811

教你怎样扩展Eclipse的扩展点(三)

接下来,我们开始实现 扩展点的一些 功能吧,新增选中的包和类: 为了方便起见,我将这些类的源代码贴出来  TheFirstAction .java:  package org.vwpolo.rcp....
  • vwpolo
  • vwpolo
  • 2008年02月13日 18:18
  • 2057

eclipse自定义扩展点

一、组成 一个扩展点(Extension Point)包括ID、Name及Schema文件,shema文件以ID命名,后缀为.exsd,存放在插件schema目录下。   使用eclipse的向导...
  • Yangyan518
  • Yangyan518
  • 2016年01月26日 16:46
  • 1151

教你怎样扩展Eclipse的扩展点(四)

现在差不多了,我们在 ApplicationActionBarAdvisor .java 文件的 fillMenuBar  方法调用  ExtensionHelper 的方法就行了      prot...
  • vwpolo
  • vwpolo
  • 2008年02月13日 18:19
  • 1332

spring mvc 提供的几个常用的扩展点

spring mvc 提供的几个常用的扩展点
  • gufachongyang02
  • gufachongyang02
  • 2015年02月15日 17:01
  • 3660
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:正确理解扩展关系和扩展点
举报原因:
原因补充:

(最多只允许输入30个字)