梳理UML类图中六种关系
Posted dengyu的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了梳理UML类图中六种关系相关的知识,希望对你有一定的参考价值。
…今天在看代理模式(proxy pattern)时候,突然发现自己对UML的类图六种关系还存在迷惑,于是网上查找资料并进行一次知识梳理。
UML中类图的六大关系
1 实现关系(Realization)
…实现关系是指一个类实现接口的功能。实现是类与接口之间最常见的关系,Java语言中使用关键字implements。
…UML图中,实现使用一条带有空心三角箭头的虚线指向接口
2 泛化或继承关系(Generalization)
…泛化表现为继承关系(is a)。继承关系是指一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可扩展自己新功能的能力,继承是类与类或者接口与接口之间最常见的关系。Java语言中使用关键字extends。
…UML图中,实现使用一条带有空心三角箭头的实线指向接口
3 依赖关系(Dependency)
…表现为函数中的参数use a。依赖关系表现的是类与类之间的连接,表示一个类依赖于另一个类的定义,其中一个类的变化会影响另外一个类。假设A依赖于B,B体现为局部变量,方法的参数,或者静态方法的调用
(1)类B以参数的形式传入类A的方法
(2)类B以局部变量的形式存在于类A的方法
(3)类A调用类B的静态方法
…UML图中,实现使用一条带有箭头的虚线指向被依赖的类
4 关联关系(Association)
…表现为变量 has a.关联关系表示类与类之间的联接关系,它使得一个类知道另一个类的属性和方法。如果A依赖于B,则B体现为A的成员变量。
关联关系有2种:双向关联,两个类都知道另一个类的公共属性和操作;单向关联,只有一个类知道另一个类的公共属性和操作.单向关联更容易建立和维护,有助于寻找可使用的类。
…UML图中,实现使用一条实线连接相同的或不同的类
5 聚合关系(Aggregation)
…聚合是一种强的关联关系。聚合强调整体与部分的关系,同时也是一种拥有的关系(has a)。整体与部分之间是可以分离的,有各种的生命周期。本质上讲聚合和关联没什么区别,只是从语义上来理解聚合关系比关联关系要强。
…UML图中,使用一条带有虚心菱形的线来表示
6 组合关系(Compozition)
…组合也是关联关系的一种,它比聚合关联更强的一种关联关系。表现为contains a的关系。它和聚合关系最大的区别是整体和部分的生命周期是一样的,而且整体和部分不可分割。
比如:人和你的四肢,是不可分割的一个整体。
…UML图中,使用一条带有实心菱形的线来表示
总结
1从关联关系表现出的强弱程度比较:
…组合>聚合>关联>依赖
2聚合和组合的区别
…聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象.
…聚合和组合的区别则在语义和实现上都有差别,组合的两个对象之间其生命期有很大的关联,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象,例如一个文档的版本,必须依赖于文档的存在,也只能属于一个文档。聚合则不一样,被聚合的对象可以属于多个聚合对象,例如一个员工可能可以属于多个公司。
3聚合和关联的区别
…关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。
参考资料
1sfdev https://blog.csdn.net/sfdev/article/details/3906243
2明天更美好sy https://blog.csdn.net/u011399678/article/details/52583443
3有点发红
https://blog.csdn.net/sadfishsc/article/details/7219977
以上是关于梳理UML类图中六种关系的主要内容,如果未能解决你的问题,请参考以下文章