依赖、关联、聚合、组合、泛化,耦合强度从小到大

依赖

image.png
使用虚线箭头
最弱的耦合,学生的某些行为需要使用电脑,这就叫产生了依赖。依赖在代码中表现为:Student类的某个**成员函数的形参、返回值、局部变量或者静态方法的调用等**。表示Student类依赖Computer类。

关联

image.png
使用实线箭头
耦合强度比依赖要强,学生可以不用电脑,但是不能没有老师。关联是更紧密的关系,会在Student类中添加Teacher类的成员变量
关联分为:单向关联、双向关联、自身关联,多维关联
image.png

依赖和关联的区别

  1. 发生依赖关系的两个类都不会增加属性,只是作为方法形参、返回值或者局部变量而已。发生关联的两个类,其中一个类会成为另一个类的属性。
  2. 从对象的生命周期来看,依赖关系只在方法被调用的时候发生,方法调用结束,依赖关系就会结束。关联关系在类的实例化的时候产生,类对象被销毁的时候关联关系才会结束。

聚合

image.png
聚合使用实线、菱形连接。
聚合关系在代码上也是用成员变量进行表示。例如Classes类有Student这个成员变量。

组合

image.png
组合使用实现、实心菱形进行表示。
组合关系在代码上也是由成员变量进行表示。

聚合关系和组合关系的比较

  1. 聚合关系没有组合关系紧密
    • 学生不会因为班级解散而无法存在,聚合关系的类具有不同的生命周期
    • 但是学生没有心脏的话无法存活:组合关系的类具有相同的生命周期
  2. 信息的封装性不同
    • 聚合关系中,客户端可以同时了解Class类和Student类,因为两者是独立的。
    • 组合关系中,客户端认识Student类,但是不知道Heart类,因为心脏类被严密的封装在学生类中。

      泛化

      泛化关系是指:类与类之间的继承关系和 类与接口之间的实现关系。
      image.png
      image.png