UML类图:类之间的6种关系及表示方法
常见的关系有:继承,关联关系,聚合关系,复合关系,依赖关系,实现关系。
其中,聚合关系(Aggregation),组合关系(Composition)属于关联关系(Association)。
几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖。
-
虚线箭头指向依赖;
-
实线箭头指向关联;
-
虚线三角指向接口;
-
实线三角指向父类;
-
空心菱形能分离而独立存在,是聚合;
-
实心菱形精密关联不可分,是组合;
这些关系之间的表示方法如下图所示
-
继承(泛化)
一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的特征和行为。
-
实现
一种类与接口之间的关系,表示类是接口所有特征和行为的实现
-
组合
整体与部分的关系,但部分不能离开整体而单独存在
-
聚合
整体与部分的关系,部分可以离开整体而单独存在
-
关联
关联关系是类与类之间的联结
是一种拥有的关系,它使一个类知道另一个类的属性和方法
关联关系可以是
单向
也可以是双向
,双向的关联关系两端没有箭头或两个箭头
,单向的关联关系有一个箭头
,而且箭头在被关联类方 -
依赖
依赖关系也是代表类与类的联结
是一种使用的关系,即一个类的实现需要另一个类的协助
依赖必须是
单向
的。
聚合和组合的区别
这两个比较难理解,重点说一下。聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。
关联和聚合的区别
关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。
依赖于关联的区别
1.首先从关系程度上依赖没有关联程度强烈,对于两个类之间的依赖,只是保持在方法上,例如一个类的方法中引用了某个类的变量。
2.在关联中确实彼此把对方作为自己的一个属性,耦合度更高。保持的时间更长些,毕竟是作为一个属性存在,实例化我的时候,就会有你。而依赖只是单纯的用到对方方法时才存在
泛化与实现的区别
其实泛化与实现之间的关系只有一点,如实是实现的话,那么子类就不能够在扩充方法,如果是泛化的话,可以在父类基础上再次扩充自己的方法。