UML之用例图

用例图

主要用来描述 用户、需求、系统功能单元 之间的关系。它展示了一个外部用户能够观察到的系统功能模型图。

【用途】:帮助开发团队以一种可视化的方式理解系统的功能需求。

用例图所包含的元素如下:

1. 参与者(Actor)

表示与您的应用程序或系统进行交互的用户、组织或外部系统。用一个小人表示。

2. 用例(Use Case)

用例就是外部可见的系统功能,对系统提供的服务进行描述。 用椭圆表示

3. 子系统(Subsystem)

用来展示系统的一部分功能,这部分功能联系紧密。

4. 关系

用例图中涉及的关系有:关联、泛化、包含、扩展;

如下表所示:

a. 关联(Association)

表示参与者与用例之间的通信,任何一方都可发送或接受消息。

【箭头指向】:指向消息接收方

b. 泛化(Inheritance)

就是通常理解的继承关系,子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可以重载它。父用例通常是抽象的。

【箭头指向】:指向父用例

c. 包含(Include)

包含关系用来把一个较复杂用例所表示的功能分解成较小的步骤;

【箭头指向】:指向分解出来的功能用例

d. 扩展(Extend)

扩展关系是指 用例功能的延伸,相当于为基础用例提供一个附加功能。

【箭头指向】:指向基础用例

e. 依赖(Dependency)

以上4中关系,是UML定义的标准关系。 但VS2010的用例模型图中,添加了依赖关系,用带箭头的虚线表示

表示源用例依赖于目标用例;

【箭头指向】:指向被依赖项

5. 项目(Artifact)

用例图虽然是用来帮助人们形象地理解功能需求,但却没多少人能够通看懂它。很多时候跟用户交流甚至用Excel都比用例图强,VS2010中引入了“项目”这样一个元素,以便让开发人员能够在用例图中链接一个普通文档。

用依赖关系把某个用例依赖到项目上

然后把项目-》属性 的Hyperlink 设置到你的文档上,这样当你在用例图上 双击项目时,就会打开相关联的文档。

6. 注释(Comment)

包含(include)、扩展(extend)、泛化(Inheritance) 的区别:

条件性:泛化中的子用例和include中的被包含的用例会无条件发生,而extend中的延伸用例的发生是有条件的;

直接性:泛化中的子用例和extend中的延伸用例为参与者提供直接服务,而include中被包含的用例为参与者提供间接服务。

对extend而言,延伸用例并不包含基础用例的内容,基础用例也不包含延伸用例的内容。

对Inheritance而言,子用例包含基础用例的所有内容及其和其他用例或参与者之间的关系;、

注意:凡是可以用extend的都可以用include来代替。


 

 

用例图示例:

酒店预订订购的例子:


 

绘制用例图

1.将“子系统”边界从工具箱拖到关系图中,它可以表示整个系统或其中的主要组件。

       如果不希望描述系统或其组件支持哪些用例,用例图中可以不绘制系统边界。

        根据需要,拖动系统的四角将其扩大。对其适当地重命名。

2.将“参与者”从工具箱拖到关系图中(将其放在所有系统边界之外)。

        参与者表示与您的系统进行交互的各类用户、组织和外部系统。

        重命名这些参与者。例如:“顾客”、“Actor”、“信用卡机构”。

3.将“用例”从工具箱拖到适当的系统中。

        用例表示参与者在系统的帮助下所执行的活动。

    使用参与者自身能够理解的名称重命名这些用例。例如:“find hotel”、“choose hotel”、“payment”。不要使用与代码有关的名称。

    从主要的事务(如“find hotel”)开始,直到后面较小的事务(如“choose room”)为止。

    将每个用例放入支持它的系统或主要子系统(忽略任何只与用户有关的外观模式或组件模式)。

    可以在系统边界外绘制用例,以表明系统(可能在特定版本中)不支持该用例。

4.单击工具箱上的“关联”,然后单击用例,再单击该用例的参与者。以此方式将每个参与者与其用例相链接。

5.用“包括”、“扩展”和“泛化”关系结构化用例。若要创建其中的每个链接,请依次单击工具、源用例和目标。请参见下面的结构化用例一节。

6.详细描述用例。请参见下面的详细描述用例一节。

7.绘制其他关系图,使其分别针对不同子系统或不同相关用例组。一个建模项目中的所有关系图是同一模型的多种视图


 

结构化用例

应设法只用几个主要用例来描述系统的行为。每个大型用例定义某个参与者实现的主要目标,如预订酒店,就只需要查找目的地、查找酒店、付款三个主用例(目标)。

  明确这些目标之后,可以细化如何实现每个目标以及基本目标的变体。

     应避免将用例分解得过细。用例应基于用户对系统的体验,而不是系统内部的处理。此外,您通常会发现,创建代码的早期工作版本比花费时间对用例进行精细的结构化更高效。

 

您可以在用例图中概括主要用例和细化用例之间的关系。以下各节对此进行介绍:

    用"包括"显示用例的细节

    用"泛化"共享目标

    用"扩展"分离变体用例


 

用"包括"显示用例的细节

使用“包括”关系可以表明一个用例用于描述另一个用例的一些细节。在图示中,“订餐”包括“付款”、“选择菜单”和“点菜”。每个被包括的细化用例是一个或多个参与者为了实现包括用例的整体目标可能必须执行的一个步骤。箭头应指向细化的被包括用例。

警告:不应造成会导致用例包括自身的包括关系循环。循环可能会产生错误。

可以共享被包括用例。在示例中,“订餐”和“订阅评论”用例都包括“付款”。

被包括用例的目标和方案应具有独立意义,以便可以包括在以后设计的用例中。

将用例分为包括部分和被包括部分对于实现以下目标很有用:

将用例描述结构化为不同的详细层次。

避免在不同用例中重复共享方案。


 

用泛化共享目标

“泛化”关系用于表明专用用例是实现由另一个通用用例表示的目标的一种特定方式。箭头应指向更通用的用例。

例如,“付款”泛化“信用卡付款”和“现金付款”。

警告:不应造成会导致参与者泛化自身的泛化关系循环。循环可能会产生错误。

专用用例有助于展示系统实现相同目标的不同方法。

专用用例视为继承了通用用例的目标和参与者。通用用例可以没有自己的方案;其专用化描述实现目标的不同方法。

通过两个或更多用例重构共同目标

  1.创建新的通用用例,并为其命名。

  2.创建一个“泛化”关系,其箭头指向新的通用用例。

      a.单击工具箱中的“泛化”。

      b.单击专用用例(示例中为“信用卡付款”)。

      c.单击通用用例(示例中为“付款”)。

 3.如果已描述专用用例的目标,则可将共同部分移入通用用例的描述。

 4.可将在专用用例之间共享的参与者移到通用用例。


 

用扩展分离变体用例

“扩展”链接用于表明一个用例可以在特定情况下向另一个用例添加功能。箭头应指向被扩展的主用例。

警告;不应造成会导致参与者泛化自身的扩展关系循环。循环可能会产生错误。

例如,典型网站的“登录”用例可以包括“注册新用户”,但仅限用户还没有帐户的情况。

  将用例分为主要部分和扩展部分

  1.创建新的扩展用例,并为其命名。

  2.创建一个“扩展”关系,其箭头指向被扩展用例。

      a.单击工具箱中的“扩展”。

      b.单击扩展用例(示例中为“注册新用户”)。

      c.单击被扩展用例(示例中为“登录”)。

  注意:不要在关系图中创建扩展关系的循环。用例不能成为自身的扩展。

  3.如果已创建被扩展用例的方案,可将相关步骤移入扩展方案。

  4.扩展的描述(示例中为“注册新用户”)应包括在主用例方案中出现扩展的位置和条件的详细信息。将其视为修改主用例的描述。

扩展用例表示本应属于主用例方案一部分的方案步骤。主用例的上下文将始终读入扩展的方案和目标,因此它们可以不具有独立意义

描述以下情况时分离扩展很有用:

  存在仅参与扩展用例的额外参与者。例如,需要管理员来批准顾客在网站上的注册。

  单独的子系统将处理扩展用例。

  此扩展将只在系统的特定版本中可用。您可以在用例图中将每个版本显示为一个单独的子系统。


 

详细描述用例

用例表示:

    参与者使用系统要实现的目标,如“购买餐饮”;以及一个或多个方案,即为实现目标而执行的一系列步骤,如:{“订餐”、“付款”、“送餐”}。除了成功方案以外,还可能有若干异常或失败方案,如“信用卡被拒”。

  对用例的描述可以有不同的详细程度。在设计的早期阶段,仅在用例图上标示名称就足够了。稍后就可以编写更加详细的方案描述。

在umlet14.4中,可以采用多种方法描述用例,这些方法可以分开使用,也可以一起使用:

1将用例链接到项目中的另一个或几个关系图。

 活动图有助于解释包含循环、分支和并行线程的较复杂流程。活动图还可以显示流程各部分之间的数据流。

 序列图有助于解释不同参与者之间复杂的交互序列。序列图还可用于显示系统内发生的对每个用例的响应。

2将用例链接到用于详细描述用例的 OneNote 页面、节或段落。

3将用例链接到 Word 文档,在该文档中使用文本、屏幕截图等来描述该用例的方案。有关更多信息,请参见用户需求建模。

 

posted @ 2017-06-03 19:39  Arrkwin  阅读(611)  评论(0编辑  收藏  举报