1 UML定义的类与类之间关系
2 具体关系
2.1 依赖 (Dependency)
-
类A需要使用B的功能,但A和B一点关系没有(A不持有B的引用),所以代码中调用A的方法时,才传入B
-
使用场景:你是一名出租车司机,每天开着公司给你分配的车去载客,而每天出租车可能不同,我只是个司机,公司给我什么车我就开什么车,我使用这个车
-
代码
class Driver { //通过形参方式发生依赖关系 public void drive1(Car car) { car.run(); } //通过局部变量发生依赖关系 public void drive2() { Car car = new Car(); car.run(); } //通过静态变量发生依赖关系 public void drive3() { Car.run(); } }
-
类图
2.2 关联 (Association)
-
表示A和B之间具备很强的关系(A持有B的引用)
-
如果关联的两个对象有整体和部分的关系,就叫聚合或组合
-
类似我和我的朋友,关系一般是长期性的而不是临时的,因为,不是随便弄两个人,就可以成为朋友
-
代码
class Driver { private Car car = new Car(); public void drive() { car.run(); } } class Car { public void run(){} }
-
类图
2.2.1 聚合 (Aggregation)
- 是一种特殊的关联,从代码上讲,和关联没有区别,在语义上聚合表示整体与部分的关系,且整体与部分间可以分离,他们可以具有各自的生命周期,因此体现在代码中通常可以通过set来修改聚合的对象
- 使用场景
- 你与你的电脑(或者其它物品),电脑是属于你的,但是你不是一出生就拥有了电脑,电脑是某个厂商生产出来的,然后你买过来才成为了你的一部分。你死了以后,电脑也可以送给别人继续使用
- 类图
2.2.2 组合 (Composition)
- 是一种特殊的关联,从代码上讲,和关联没有区别,在语义上聚合表示整体与部分的关系,但整体与部分不可分离,因此体现在代码上通常不提供set方法,而是在构造方法构造整体时,就传入了部分
- 使用场景:人与人的某个器官,人一出生,器官就在,人死亡,器官也就没了意义
- 类图
2.3 继承 (Generalization)
- 从代码上讲,使用extends关键字关联的两个类或接口
- 类图
2.4 实现 (Implementation)
- 从代码上讲,使用implements关键字关联的类和接口
- 类图
3 UML画法总结
3.1 表示类与类间关系
- 虚线:通常表示关系不够牢固,可能是实现结果或依赖
- 实线:表示关系比较牢固,可能是继承、关联、聚合、组合
- 空箭头:表示语法上确实有关联,例如继承或实现
- 菱形:表示区分聚合和组合,聚合关系没有组合牢固,所以聚合使用空心菱形,组合使用实心菱形
3.2 符号与表示法
- 第一行表示类名,第二行表示属性,第三行表示方法
- +表示public,-表示private,#表示protected
- 属性表示:权限 属性名 : 类型 [ = 缺省值 ]
- 方法表示:权限 方法名 ( 参数列表 ) [ 返回值类型 ]