UML用例图中的关系浅析
本文参考自:
http://www.cnblogs.com/wolf-sun/p/3413072.html
https://www.cnblogs.com/xiaolongbao-lzh/p/4590897.html
https://blog.csdn.net/lxy344x/article/details/40346525
用例图主要用来描述角色以及角色与用例之间的连接关系。说明的是谁要使用系统,以及他们使用该系统可以做些什么。一个用例图包含了多个模型元素,如系统、参与者和用例,并且显示这些元素之间的各种关系,如泛化、关联和依赖。它展示了一个外部用户能够观察到的系统功能模型图。
【用途】:帮助开发团队以一种可视化的方式理解系统的功能需求。
用例就是外部可见的系统功能,对系统提供的服务进行描述。一个用例在代码里不一定表现为一个类,它可以是一个类的一个方法,也可以是很多类组成一个用例,一个用例代表的是一个功能。
用例图的关系有:
- 参与者与用例间的关联关系
- 用例之间的关系
– 使用关系(又称“包含关系”,include)
– 扩展关系(extend)
– 泛化关系
参与者与用例间的关联关系
是参与者与用例间的通信,也称关联或通信关系,这个参与者可以是用户,也可以是某个系统。
其实如果从广义上讲,用例与用例间的关系,无非是将一个用例当成了参与者而已,不过这样的话又可以细分为两种了,即下面要讲的使用关系和扩展关系。
使用关系
使用关系又称包含关系,但我觉得说“使用”更恰当,它是指某一个用例需要实现的某些功能是通过调用另一个用例的某些方法来实现的。
在用例图中用<<include>>
来表示这种关系
举个例子,就是在图书馆还书时,不论借书还是还书都需要判断是否有书超时,那么就可以画出如下的图:
扩展关系
扩展关系是用例与用例间的功能上的扩展,和泛化不同。
下面通俗点解释一下:如果一个功能的执行过程中,需要先执行A部分,再根据情况判断是执行B部分还是C部分,那么就可以使用扩展关系,将A部分(即公共部分)提取为一个“基本用例”,然后将其与B和C部分分别组装成两个扩展用例,他们之间的关系就叫扩展关系。
如下图可以方便理解,其需要在虚线上写上<<extends>>
到这儿大家或许会疑惑,包含关系和扩展关系似乎都是一个用例调用另一个用例的功能,但其实是有区别的。
包含关系强调的是一个用例的功能需要另一个用例的帮助才能实现,强调了这个间接性。
扩展关系强调的是用例在执行某一个功能时,可能会根据情况的不同,有部分代码的执行是不一样的(类似if…else if…),强调的是不确定性。
泛化关系
其实泛化关系和类图中泛化关系是对应的,不过这里是用例间的泛化,或是参与者之间的泛化。
泛化和包含关系的区别,在于泛化强调的是直接服务,而包含强调的是间接服务。
用这篇博客里的总结来说:https://blog.csdn.net/lxy344x/article/details/40346525