类间关系综述
1纵向
1)继承父类
2)实现父类接口
2横向
1)类成员对象,引用,指针。
2)类中成员函数的对象,引用,指针。
3关系规范
1)泛化
2)实现
3)关联:
---普通关联A-A
---聚合关联Has-a
---组合关联Contain-a
---依赖关联 Use-a
---------------------------------------------detail-----------------------------------------------
Generalization(泛化)
1)泛化关系
是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为。实际上就是一种扩展。
2)箭头指向:
带三角箭头的实线,箭头指向父类。
3)类图关系
Interface Realization(实现)
1)实现关系
是一种类与接口的关系,表示类是接口所有特征特征和行为的实现
2)箭头指向
带三角箭头的虚线,箭头指向接口。
3)类图关系
Association(关联)
关联关系
是一种拥有的关系,它使一个类知道另一个类的属性和方法,强调的是一种A-A的关系。关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
在代码层面,通常体现为成员变量的关系。
箭头及指向
带普通箭头的实心线,指向被拥有者。
类图关系
关联的种类:
Aggregation(聚合关联)
聚合关系
聚合是关联关系的一种特例,它体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们具有各自的生命周期。部分可以属于多个整体对象,也可以为多个整体对象共享。比如公司与员工的关系等。
表现在代码层面,和关联关系是一致的,智能从语义级别来区分。
箭头指向
带有空心菱形的实心线,菱形指向整体。
类图关系
Composition(组合关联)
组合关系
组合也是关联关系的一种特例,它体现的是一种contains-a的关系,这种关系比聚合更强,也成为强聚合;他同样也体现整体与部分的关系,但此时整体与部分是不可分割的他要求代表整体的对象负责代表部分的对象的生命周期。整体的生命周期的结束意味着部分生命周期的结束。比如你和你的大脑。
表现在代码层面,和关联关系是一致的,只能从语义层面作区分。
将头及指向
带实心菱形的实线,菱形指向整体。
类图关系
组合与聚合的区分
大雁和雁群,是一种弱的关联关系,雁群拥有大眼,大雁是雁群的一部分,但是也可以独立存在,可以不与雁群有相同的生命周期。而大雁有两个翅膀,翅膀和大雁是部分和整体的关系,并且有着相同的生命周期。
Dependency(依赖关联)
依赖关系
是一种使用的关系,即一个类的实现需要另一个类的协助,所以尽量不要使用双向的相互依赖。
比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现代码层面,为类B作为参数被类A在某个method方法中使用。
局部变量,方法的参数或者对静态方法的调用。
箭头及指向
带箭头的虚线,指向被使用者
类图关系
综合评述
对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;聚合跟组合其实都属于关联 只不过它们是两种特殊的关联 因为本是同根生 所以它们之间难免会有相似之处。但总的来说,后几种关系所表现的强弱程度依次为:组合 > 聚合 > 关联 > 依赖。