才子佳人博客

我的故事我讲述

UML 用例之间的三种关系
###SmallArticleTitle###
来源:xjh;  编辑:xjh;  2019-11-06

UML用例的关系有泛化(generalization)、扩展(extend)和包含(include)。

相同点: 三者都是从现有的用例中抽取公共信息的那部分,作为一个单独的用例,然后采用不同的方法来重用这个公共的用例。

不同点:

1)generalization

泛化关系是一种抽象关系,当多个用例共同拥有一种类似的结构和行为时,可以将他们的共性抽象成为父用例,其他的用例作为泛化关系的子用例。在用例的泛化关系中,父用例通常是抽象的,子用例是父用例的一种特殊形式,它继承了父用例的所有结构、行为、关系。

泛化关系在用例图中使用空心的实线箭头表示,箭头方向从子用例指向父用例。对泛化的理解可参阅附件shape泛化范例java代码实现

如下图所示,在该图中,仓库管理员、系统管理员、经理都是员工的一种,因此员工拥有的功能这三者都拥有,如登录、修改个人信息等,为了减少用例的个数并且使系统更加符合面向对象设计规范,可以对执行者进行泛化,将各类执行者都具有相同的功能移至父执行者,而将每类执行者特有的功能保留在子执行者中。


2)extend

扩展关系又称为延伸关系,即用例功能的延伸,相当于为基本用例提供一个附加功能。如果使用一个新的用例对原有用例的行为进行扩展时可以使用扩展关系,即将一些常规的动作放在一个基本用例中,将可选的或只在特定条件下才执行的动作放在它的扩展用例中。

extend关系在用例图中使用带箭头的虚线表示(在线上标注<<extend>>),箭头从子用例指向基用例。

用例B extends用例A,表示用例B是用例A在某种特定情况下可能会出现的扩展用例。

例1,如下图所示仓库管理员在入库时发现某种商品在系统中暂不存在,则可以增加新的商品信息;如果入库商品均已存在,则无需增加商品信息,此时用例“增加商品信息”可以作为用例“入库”的扩展用例。


例2,系统中允许用户对查询的结果进行导出、打印。对于查询而言,导出与否、打印与否,查询结果都是一样的,导出、打印功能和查询相对独立,而且为查询添加了新行为。因此可以采用扩展关系来描述,如下图所示:


由此可见,extend关系,它是一种行为的扩展,功能的延伸,而非抽象关系,这一点是与泛化关系重要的区别。

3)include包含关系

如果多个用例都具有一部分相同的行为,可以将这部分相同的行为作为一个单独的用例抽取出来,与原来的用例形成一个包含关系。这比较类似代码开发中将重复的代码抽出来做为一个独立的函数调用,包含关系典型的应用就是代码复用。包含关系也可用来把一个较复杂用例所表示的功能分解成较小的功能。

在UML中,包含关系用依赖线(虚线)加一个<<include>>表示,由原始用例指向包含用例,即指向分解出来的功能用例。所以include关系中的基用例必须和子用例一起使用才够完整。通俗的说,就是采用包含关系的几个用例是被拆分的一个整体,大家相互依靠,缺一不可。

通过ATM “取款”和“转账”后,都会包含有“打印回执”,那么“打印回执”则抽象出一个子用例,然后通过include包含到“转账”和“取款”用例中。如下图所示:


来源参考:
https://www.cnblogs.com/dsh20134584/p/7306503.html
shape泛化范例java代码实现

分类:编程开发 | 评论数:0 | 浏览数:46
相关文章
文章点击排行
本年度文章点击排行
发表评论:
  • 昵称: *
  • 邮箱: *
  • 网址:
  • 评论:(最多100字)
  • 验证码: