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

2015-01-27 18:12:37 · 作者: · 浏览: 66

用例图使用户 与开发人员交流的一种重要的方式,是对用户需求的一种描述。开发人员从用户的角度整体上理解系统的功能。

用例图主要有三种元素:参与者(Actor),用例,以及用例图中对象间到的关系。其中关系有包含、扩展是用例图中特有的,泛化在其他类图中同样存在。

包含:当可以从两个或两个以上的用例中提取公共行为时,应该使用包含的关系来表示它们。其中这个提取出来的公共用例成为抽象用例,而把原始用例成为基本用例或基础用例。其中“< >”是包含关系的构造型,箭头指向抽象用例。

例如,在机房收费系统中“注册学生信息”和“充值”两个用例都需要操作员或者管理员登陆,为此,可以定义一个抽象用例“用户登陆”。用例“注册学生信息”和“充值”与用例“用户登陆”之间的关系就是包含关系。

如图 \

有时当某用例的事件流过于复杂时,为了简化用例的描述,我们也可以抽象出一个基用例,来包含这些颗粒的用例

\


作用:当多个用例需要使用同一段事件流时,抽象成为公共用例,可以避免在多个用例中重复地描述这段事件流,也可以防止这段时间流在不同用例中的描述出现不一致。当需要修改这段公共的需求时,也只要修改一个用例,避免同时修改多个用例而产生的不一致和重复性工作。另外,当某个用例的事件流过于复杂时,为了简化用例的描述,也可以将某段事件流抽象成为一个被包含的用例。<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+MqGiwKnVubnYz7U8L3A+CjxwPiAgICAgICAgyOe5+9K7uPbTw8D9w/fP1LXYu+y6z8HLwb3W1rvy1d/BvdbW0tTJz7XEsrvNrLOhvrCjrLy0uPm+3cfpv/a/ycTct6LJ+rbg1ta31tano6zU8r/J0tS9q9XiuPbTw8D9t9bOqtK7uPa7+bG+08PA/brN0ru49rvytuC49sCp1bnTw8D9o6zV4tH5v8nE3LvhyrnD6Mr2uPy808flzvqho8Cp1bnTw8D9zqq7+dPDwP3M7bzT0MK1xNDQzqqho8Cp1bnTw8D9v8nS1LfDzsq7+dPDwP21xMr00NSjrNLytMvL+8TcuPm+3bv508PA/dbQwKnVubXjtcS1scew17TMrMC0vva2qMrHt/HWtNDQ19S8uqGjtvjAqdW508PA/bbUu/nTw8D9sru/ybz7oaPI57v6t7/K1bfRz7XNs9bQobDOrLuk0afJ+tDFz6KhsbLZ1/fKscjnufu3os/W0MXPotPQzvO78tXfuPzQwtTy0OjSqsq508OhsNDeuMTRp8n60MXPoqGx08PA/c3qs8m4/NDCo6zL+dLU08PA/aGwsunRr8nPu/q8x8K8obG6zaGwtbyz9kVYQ0VMobHWrrzktcS52M+1vs3Kx8Cp1bm52M+1oaOhsDw8ZXh0ZW5kPj6hscrHwKnVubnYz7W1xLm51OzQzaOsvP3Nt9a4z/K7+bG+08PA/aGjPC9wPgo8cD7I5828ICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPQ=="https://www.cppentry.com/upload_files/article/49/1_kns6i__.jpg" alt="\">

包含关系和扩展关系的联系和区别

联系:都是从现有的用例中抽取出公共的那部分信息,作为一个单独的用例,然后通后过不同的方法来重用这个公共的用例,以减少模型维护的工作量。

区别:扩展关系中基本用例的基本流执行时,扩展用例不一定执行,即扩展用例只有在基本用例满足某种条件的时候才会执行。

包含关系中基本用例的基本流执行时,包含用例一定会执行。

3、泛化

当多个用例共同拥有一种类似的结构和行为时,可以将他们的共性抽象成为父用例,其他的用例作为泛化关系的子用例。在用例的泛化关系中,子用例是父用例的一种特殊形式,它继承了父用例的所有结构、行为、关系。其中三角箭头指向父用例。假如在机房收费系统的注册可以通过本地注册和网上注册。则

用例图如 \

同样,一般用户,操作员,管理员之间也存在泛化的关系

如图 ??-??篡?9CR?j?编??x&?K	??坚痕?-⒍膻??ky系统提供服务的UML表述,那么服务这个过程在所有用例场景中是必然发生的,但发生按照发生条件可分为如下两种情况:
⒈无条件发生:肯定发生的;
⒉有条件发生:未必发生,发生与否取决于系统状态;

因此,针对用例的三种关系结合系统状态考虑,泛化与包含用例属于无条件发生的用例,而扩展属于有条件发生的用例。进一步,用例的存在是为Actor提供服务,但用例提供服务的方式可分为间接和直接两种,依据于此,泛化中的子用例提供的是直接服务,而包含中的被包含用例提供的是间接服务。同样,扩展用例提供的也是直接服务,但扩展用例的发生是有条件的。

另外一点需要提及的是:泛化中的子用例和扩展中的扩展用例均可以作为基本用例事件的备选择流而存在。