`
newleague
  • 浏览: 1472764 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

UML用例图

 
阅读更多

一、UML用例建模简介

   

      用例建模是UML建模的一部分,它也是UML里最基础的部分。用例建模的最主要功能就是用来表达系统的功能性需求或行为。依我的理解用例建模可分为 用例图和用例描述。用例图由参与者(Actor)、用例(Use Case)、系统边界、箭头组成,用画图的方法来完成。用例描述用来详细描述用例图中每个用例,用文本文档来完成。用例图还包括由箭头所组成的各种关系,包括泛化,包含,扩展等。
 
1. 用例图
(1)参与者(Actor),也叫动作者,表示系统用户能扮演的角色(role) 。这些用户可能是人,可能是其他的计算机,一些硬件或者甚至是其它软件系统。唯一的标准是它们必须要在被划分进用例的系统部分以外。它们必须能刺激系统部分并接收返回。 
      还有一点要注意的是,参与者不是指人或事物本身,而是表示人或事物当时所扮演的角色。比如小明是图书馆的管理员,他参与图书馆管理系统的交互,这时他既可以作为管理员这个角色参与管理,也可以作为借书者向图书馆借书,在这里小明扮演了两个角色,是两个不同的参与者。参与者在画图中用简笔人物画来表示,人物下面附上参与者的名称。
(2)用例(Use Case)。
     用例是对包括变量在内的一组动作序列的描述,系统执行这些动作,为执行此动作的参与者产生一个可观察的结果值。我们可以这样去理解,用例是参与者想要系统做的事情。例如,可以把计算器作为用例,使用计算器的用户为参与者,参与者按了3+3(动作序列),计算器返回一个结果6。
     对于用例的命名,我们可以给用例取一个简单、描述性的名称,一般为带有动作性的词。用例在画图中用椭圆来表示,椭圆下面附上用例的名称。
(3)系统边界是用来表示正在建模系统的边界。边界内表示系统的组成部分,边界外表示系统外部。系统边界在画图中方框来表示,同时附上系统的名称,参与者画在边界的外面,用例画在边界里面。因为系统边界的作用有时候不是很明显,所以我个人理解,在画图时可省略。
 
(4)箭头。用来表示参与者和系统通过相互发送信号或消息进行交互的关联关系。箭头尾部用来表示启动交互的一方,箭头头部用来表示被启动的一方,其中用例总是要由参与者来启动。
(5)泛化。泛化和类中的泛化概念是一样的,子用例继承父用例的行为和含义,还可以增加或覆盖父用例的行为;子用例可以出现在任何父用例出现的位置(父和子均有具体的实例)。下面给出两种图示来说明泛化的概念和含义(分别是含义继承和行为继承)。
含义继承行为继承
(6)use。其关系非常象一个函数调用或一个子过程。以这种方式使用的UML用例称为抽象用例,因为它不能单独存在,而必须被其它用例使用。例如系统边界框图中的UPC读取器用例。
use示例
(7)include。可以把几个用例的公共步骤分离出来成为一个单独的被包含用例。类似c语言中的include。如上图所示,查询员工信息即是分离出来的被包含用例。
(8)extend。扩展关系是从扩展用例到基本用例的关系,它说明为扩展用例定义的行为如何插入到为基本用例定义的行为中。它是以隐含形式插入的,也就是说,扩展用例并不在基本用例中显示。在以下几种情况下,可使用扩展用例:

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

  b.表明只在特定条件(如例外条件)下才执行的分支流;

  c.表明可能有一组行为段,其中的一个或多个段可以在基本用例中的扩展点处插入。所插入的行为段和插入的顺序取决于在执行基本用例时与主角进行的交互。
     下图给出了一个扩展关系的例子,在还书的过程中,只有在例外条件(读者遗失书籍)的情况下,才会执行赔偿遗失书籍的分支流。

 

2. 用例描述
     用例图只是简单地用图描述了一下系统,但对于每个用例,我们还需要有详细的说明,这样就可以让别人对这个系统有一个更加详细的了解,这时我们就需要写用例描述。
     对于用例描述的内容,一般没有硬性规定的格式,但一些必须或者重要的内容还是必须要写进用例描述里面的。用例描述一般包括:简要描述(说明)、前置(前提)条件、基本事件流、其他事件流、异常事件流、后置(事后)条件等等。下面说说各个部分的意思:
简要描述:对用例的角色、目的的简要描述;
前置条件:执行用例之前系统必须要处于的状态,或者要满足的条件;
基本事件流:描述该用例的基本流程,指每个流程都“正常”运作时所发生的事情,没有任何备选流和异常流,而只有最有可能发生的事件流;
其他事件流:表示这个行为或流程是可选的或备选的,并不是总要执行它们;
异常事件流:表示发生了某些非正常的事情所要执行的流程;
后置条件:用例一旦执行后系统所处的状态。
 
二、用例图和用例描述举例
     这里用个家教网站来简单的分析用例图的画法和用例描述的写法。提取了用例图和用例描述的部分。这个家教网站分为前台客户系统和后台管理系统。
     前台客户系统用例图:
    
     后台管理系统用例图:
     
       后台管理系统中的网站公告发布的用例描述:
        
用例名称:网站公告发布
用例标识号:202
参与者:负责人
简要说明

负责人用来填写和修改家教网站首页的公告,公告最终显示在家教网站的首页上。
前置条件:

负责人已经登陆家教网站管理系统
基本事件流:

1.负责人鼠标点击“修改公告”按钮

2.系统出现一个文本框,显示着原来的公告内容

3.负责人可以在文本框上修改公告,也可以完全删除,重新写新的公告

4.负责人编辑完文本框,按“提交”按钮,首页公告就被修改

5.用例终止
其他事件流A1

在按“提交”按钮之前,负责人随时可以按“返回”按钮,文本框的任何修改内容都不会影响网站首页的公告
异常事件流

1.提示错误信息,负责人确认

2.返回到管理系统主页面
后置条件

网站首页的公告信息被修改
注释:无

 

三、泛化、包含和扩展举例

 

可知,在用例图中,角色和用例都能够泛化。角色的泛化/继承很容易理解,因为角色本来就是类(Class),它是一种版型(stereotype)为Actor的类,所以角色的继承直观而自然。但是用例的继承实际上分为两种情况,并不是简单的使用泛化,而是使用扩展(extended)和包含(include)两种泛化的特例。
扩展用于子用例的动作步骤基本上和父用例的动作步骤相同,只是增加了另外的一些步骤的情况下。包含用于子用例包含了所有父用例的动作,它将父用例作为了自己的一个大步骤,子用例常常包含一个以上的父用例。如下图:
泛化(Generalization)在面向对象的技术中无处不在,它的另一个名字也许更为著名,就是“继承”。下图给出了一个使用泛化的用例图:
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics