类与类之间的关系
1. 依赖关系(Dependency)
如果在一个A类中用到了另一个B类,那么就说A类依赖B类。类图表示如下:
只要B类满足下面条件中的任意一个,就说A类依赖B类:
- A类中用到了B类
- A类中有B类型的成员变量
- B类是A类方法的返回类型
- B类是A类方法的参数类型
- A类的方法中用到了B类
2. 泛化关系(generalization)
泛化关系可以说是继承关系,是依赖关系的特例。
用类图表示:
3. 实现关系(Implementation)
B类实现了A接口,就说A接口和B类之间有实现关系,实现关系是依赖关系的特例。
用类图表示:
4. 关联关系(Association)
关联关系表示的是类与类之间的联系,例如:
在上面的代码中,我们说Person和IdCard是双向一对一的关系。
-
聚合关系(Aggregation)
聚合关系表示的是整体和部分的关系,整体和部分是可以分开的,它是关联关系的特例。可以将聚合关系比喻为班级这样一个概念,班级由学生组成,学生可以和班级分开,离开了班级依然能够独立存在。class Computer { //Computer和Monitor、Mouse是可以分离的 private Monitor monitor; private Mouse mouse; public Computer(Monitor monitor, Mouse mouse) { this.monitor = monitor; this.mouse = mouse; } } class Monitor { } class Mouse { }
上面的例子中,创建一个 Computer 示例需要传入一个 Monitor 实例以及一个 Mouse 实例,至于 Monitor 和 Mouse 实例在什么地方创建,什么时候创建的,和 Computer 没有关系,Computer 和 Monitor、Mouse 没有共同的生命周期。Computer 实例被销毁,Monitor 和 Mouse 实例也有可能没有销毁,因为他们是外界传入的。
用类图表示:
6. 组合关系(Composite)
和聚合关系类似,组合关系关系也是用来描述整体和部分的关系,但是,它规定了部分和整体是不能分开的。可以将组合关系比喻成人和大脑、心脏的关系,在人出生的时候,必须有健康的大脑和心脏,人和大脑、心脏是患难与共的,人没了,大脑也没了。
class Computer {
//Computer这个整体和Monitor、Mouse这两个部分是不能分离的
private Monitor monitor = new Monitor();
private Mouse mouse = new Mouse();
public Computer(){
monitor = new Monitor();
mouse = new Mouse();
}
}
class Monitor {
}
class Mouse {
}
在上面的例子中,创建 Computer 实例时,就创建了 Monitor、Mouse 实例,Computer 实例和 Monitor、Mouse 实例就连为一体了,Computer 实例被销毁了,Monitor、Mouse 实例也就没了。
用类图描述:
7. 总结
实现关系和泛化关系很好理解,对应于java中的实现和继承。而依赖、关联、聚合、组合这四种关系都是语义级别的,所以从代码层面并不能完全区分各种关系,但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖。
标签:关系,Monitor,实例,Computer,之间,Mouse,monitor From: https://www.cnblogs.com/yhy373286277/p/18339110