现在的位置: 首页 > 综合 > 正文

UML中的用例图

2013年10月13日 ⁄ 综合 ⁄ 共 1456字 ⁄ 字号 评论关闭
 UML中的用例图:主要用来确定需求,图中分为多个用例(USECASE),也就是那些小人和圈圈,以及相关的注释,主要包含三种关系:包涵<include>,扩展<extend>,泛化<generalization>,其中
1. 包含关系:使用包含(Inclusion)用例来封装一组跨越多个用例的相似动作(行为片断),以便多个基(Base)用例复用。基用例控制与包含用例的关系,以及被包含用例的事件流是否会插入到基用例的事件流中。这种情况类似于在过程设计语言中,将程序的某一段算法封装成一个子过程,然后再从主程序中调用这一子过程。
2.扩展关系:将基用例中一段相对独立并
且可选的动作,用扩展(Extension)用例加以封装,再让它从基用例中声明的扩展点(Extension
Point)上进行扩展,从而使基用例行为更简练和目标更集中。扩展用例为基用例添加新的行为。扩展用例可以访问基用例的属性,因此它能根据基用例中扩展
点的当前状态来判断是否执行自己。但是扩展用例对基用例不可见。
3.
泛化关系:子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可以重载它。父用例通常是抽象的。在实际应用中很少使用泛化关系,子用例中的特殊行为都可以作为父用例中的备选流存在。
三者对用例关系的优化侧重点是不同的。如下:
         ●泛化侧重表示子用例间的互斥性;
         ●包含侧重表示被包含用例对Actor提供服务的间接性;
         ●扩展侧重表示扩展用例的触发不定性;(对基类功能的模块化扩展)

ps:

定义
include / using (包含) :基用例与包含用例之间的关系。说明如何将包含用例中定义的行为插入基用例定义的行为中。基用例可以看到包含用例,并依赖于包含用例的执行结果。但是二者不能访问对方的属性。

extend(扩展):指扩展用例与基用例之间的关系,说明如何将扩展用例定义的行为插入基用例定义的行为序列。扩展用例以模块化的方法递增地修改基用例。  
   
  generalization(泛化):一个较广泛元素和一个较特殊元素之间的类元关系。较特殊元素完整地包含了较广泛元素,并含有更多信息。较特殊元素的实例可以用于任何使用较广泛元素的地方。   
    

说明
其中include/using比较好理解,就是指
把多个用例(UseCase A'加撇号表示是在提取公共部分之前的原UseCase , UseCase
C')都使用到的相同的部分提取出来单独作为一个用例(UseCase B),然后再在分离之后的用例A, C调用B,画上连线。



extend和generization容易搞混,至于原因可能在于Java语言中的继承(也就是UML中的泛化)使用了extends这个词的缘
故。网上有不少文章把generization直接当作了extend,对学习者造成了误导;也有文章说extend和generization是特殊和
一般的关系,下面我举个具体的例子来说明。

举例
从这幅图中,我们可以看到:
“包含”比较好理解,二者之间可以认为是一个"HAS A"的关系。
“泛化”是一般的“抽象和具体”之间的关系,子用例(较特殊用例)完整包含了父用例(较一般用例),是一个"IS A"关系。“用邮件报告错误”和“用短信报告错误”都是一种具体的“报告错误”。
“扩展”的扩展用例和基用例之间既不是"HAS A"关系也不是"IS A"关系,而是“以模块化的方法递增地修改基用例”,以提供一些附加的功能。

抱歉!评论已关闭.