UML类图的几种关系浅析
类图中的主要关系有如下几种
- 关联关系
– 聚合关系
– 组合关系 - 依赖关系
- 泛化关系
- 细化关系
注:以下图片均来自网络,侵删
1、关联关系
关联关系是类与类之间的连接,表示一类对象与另一类对象之间有联系,通常将一个类的对象作为另一个类的属性。
下图为单向关联:
同样的有双向关联,注意双向关联的直线是不带箭头的,而不是两头都带箭头:
以及自关联:
当然还有多重性关联,一般在实线上标注出来即可,常见的标注如下,意思也很好理解:
1..1
0..*
1..*
0..1
m..n:表示另一个类的一个对象与最少m、最多n个该类对象有关系(m<=n)
上图是一个组合关系(别急,下面马上就讲到了),但同时也标注出了多重性关联,这表示一个公司可以有1个或多个部分(至少一个),而一个部门属于且仅属于一个公司。
聚合关系、组合关系都属于关联关系。
聚合关系(又名“共享聚集”),属于强关联关系,聚合是整体和部分的聚合,在形式上表现为这个整体不能脱离部分单独存在,但是部分可以脱离整体而存在。
严谨一点来说,顺便也解释一下为什么叫“共享聚集”,是因为聚合关系中的那个“部分”,可以被多个“整体”所共享(注意是“可以”,而不是“一定”)。
比如班级里的同学,汽车和轮胎、引擎等,在UML中用空心菱形加箭头表示,如下图:
组合关系(又叫“组合聚集”)是比聚合关系的关联性更强的一种关系,聚合关系中整体离不开部分、而部分可以离开整体,但是在组合关系里,不仅要求整体离不开部分,同时还要求部分也不可以离开整体单独存在,也就是说这里的“部分”和“整体”是一对一的,一个部分只能属于一个整体(注意这里强调的是“只能”)。比如人的头和嘴等等,在UML中用实心菱形加箭头表示:
2、依赖关系
依赖关系是一种使用关系,描述两个模型元素(类、用例等)之间的语义连接关系:其中一个模型元素是独立的,另一个模型元素依赖于独立的模型元素。简单点说,就是如果类A中某个方法中需要传一些参数,而其中一个参数是类B的一个实例,那么这就说A依赖于B。依赖关系在UML图中用虚线加箭头表示
3、泛化关系
泛化关系也叫继承关系,用于描述父类(又名“超类”、“基类”)与子类(又名“派生类”)之间的关系。在图中使用空心三角形加直线表示。
这里需要强调的是,泛化关系还可以细分,分为普通泛化和受限泛化。
普通泛化就是一般的不加约束的泛化,当然受限泛化自然就是受到一定约束条件的泛化了咯。通俗点说,除了受限泛化,剩下的就都是普通泛化。那么什么是受限泛化呢?
给泛化关系附加约束条件,以进一步说明该泛化关系的使用方法或扩充方法,这样的泛化关系叫受限泛化。预定义的约束有4种:多重、不相交、完全和不完全。
4、细化关系
细化关系常与依赖关系放在一起讲,其是指对同一个事物在不同抽象层次上的描述,即假设两个模型元素A和B都描述同一个事物,他们的区别是抽象层次不同,如果B是在A的基础上的更详细的描述,则称B细化了A,或称A细化成了B。
细化的图示符号为由元素B指向元素A的、一段为空心三角形的虚线。
很多地方会将这种关系叫做接口与实现关系,但我私以为细化关系讲的更加精准,而且包括的范围也稍大些。
不过这种关系常见的就是接口与实现了,在接口中一般没有属性,且很多操作都是抽象的,只有操作的申明而没有操作的实现。接口对应的类图前面要加一个
参考资料:
http://www.uml.org.cn/oobject/201211231.asp
https://www.cnblogs.com/shindo/p/5579191.html
https://www.docin.com/p-597421698.html