UML-idea
UML中的类与类、类与接口、接口与接口之间的关系有:泛化、关联、依赖、实现这几种
泛化
- 指的是一个类继承了另一个类的功能,并且可以添加自己的新功能,在java中用关键字extends来表示
- 符号:箭头+实三角形,如下
实现
- 值得是一个类实现了某一个或者多个接口,在java中用关键字implements来表示
- 符号:用虚线和实三角形来表示,如下:
依赖
- 依赖表示类与类之间比较弱的连接,表示一个类依赖于另外一个类的定义,依赖关系是单向的。在java中,依赖表现为:局部变量,方法中的参数、对静态方法的调用。
- 符号:虚线+箭头
关联
-
关联表示类与类之间比较强的连接,它使得一个类知道另外一个类的属性和方法。关联有两个端点,每个端点可以有一个基数,表示这个关联的类可以有几个实例。
0…1 表示可以有0个或者1个实例
0…* 表示对实例的数目没有限制
1 表示只能有一个实例
1…* 表示至少有一个实例 -
在Java中,关联关系是使用实例变量来实现的
-
符号:实线+箭头
聚合
-
聚合是关联关系的特例,是强的关联关系,聚合是整个与个体的关系,此时整体和部分是可以分离的,他们具有各自的生命周期,部分可以属于多个对象,也可以被多个对象共享;比如计算机和CPU,公司与员工的关系;在代码层面聚合与关联是一致的,只能从语义上来区分。
-
聚合关系也是使用实例变量来实现的,在java语法上区分不出关联和聚合,关联关系中类出于一个层次,而聚合则明显的在两个不同的层次。
-
符号:箭头+实线+实菱形
组合
-
组合是关联关系的一种特例,体现的是一种contain-a关系,比聚合更强,是一种强聚合关系。它同样体现整体与部分的关系,但此时整体与部分是不可分的,整体生命周期的结束也意味着部分生命周期的结束,反之亦然。如大脑和人类。
-
组合与聚合几乎完全相同,唯一区别就是对于组合,“部分”不同脱离“整体”单独存在,其生命周期应该是一致的。
-
符号:实线+箭头+菱形
实例: