关系:泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)
1. 泛化(Generalization)
就是通常意义上的继承,是一般和特殊的关系,子类特化了父类的所有特征和行为,体现为成员变量和方法
使用符号:带空心三角箭头的实线表示,箭头指向父类
2. 实现(Realization)
定义和实现定义之间的关系,主要表现为接口和与实现类
使用符号:带空心三角箭头的虚线表示,箭头指向定义(接口)
3. 依赖(Dependency)
A的变化会影响到B,可以称为B依赖A,这种关系一般来说是临时,单向的
例如:人吃饭的时候要用筷子,吃饭依赖筷子,但也是只是在吃饭的时候会依赖
使用符号:带虚线的箭头,箭头指向被依赖方 --------------->
4. 关联(Association)
体现的是两个类、或者类与接口之间语义级别的一种强依赖关系;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;
使用符号:带实线的箭头,关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
eg:
5. 聚合(Aggregation)
聚合是关联关系的一种特例,体现的是整体和部分,拥有的关系,has-a关系,但是整体和部分是可以分开存在的,他们有各种的生命周期,部分可以属于多个整体对象,一个整体可以拥有多个部分
使用符号:带空心菱形的实心线,菱形指向整体
eg:
6. 组合(Composition)
组合也是关联关系的一种,体现的是一种包含(contains-a)的关系,这种关系比聚合更强,也称为强聚合,也是整体和部分的关系,但是部分和整体式不可分割的,整体生命周期的结束也意味着部分生命周期的结束
使用符号:带实心菱形的实心线,菱形指向整体
eg:
对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;
参考:http://blog.csdn.net/sfdev/article/details/3906243