序
类与类之间的关系,本身对于实现业务开发没有太大的用处。绝大部分码农干到退休也不用了解。
主要用于解析源码结构,梳理设计意图。
概览
类之间可描述的关系大概有下面几种:继承、实现、依赖、关联、聚合、组合关系。
总览图如下:
示例
重点:关注每一种关系的连线都是不一样的。
- 学习
<<interface>>
,表示学习是一个接口; - 人
<<abstract>>
,表示人是一个抽象类;
继承关系(inherit)
- 继承关系为 is-a的关系;
- 两个对象之间如果可以用 is-a 来表示,就是继承关系;
eg: 程序员是人
表现:用于Interface和Interface之间,或者用于Class和Class之间
实现关系(Realitization)
- 类实现接口中定义的方法;
表现: 用于Interface和Class之间
关联(association)
指的是模型元素之间的一种语义联系,是类之间的一种很弱的联系。
依赖、关联、聚合、组合都是关联。依赖是最弱的关联,其次是普通关联,接下来是聚合,组合是最强的关联。
关联强度: 组合 > 聚合 > 关联 > 依赖
聚合
- 整体和个体之间的关系。是has-a的关系
- 整体和部分可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享
表现: 如果A由B聚合成,表现为A包含有B的全局对象,但是B对象可以不在A创建的时刻创建。
class A{
private B b;
public A(B b){
this.b = b;
}
}
组合
- 一种contains-a的关系
- 部分不能脱离整体而存在,整体的生命周期结束也就意味着部分的生命周期结束
表现:如果A由B组成,表现为A包含有B的全局对象,并且B对象在A创建的时刻创建。
class A{
private B b;
public A(){
this.b = new B();
}
}
依赖(Dependency)
- 从字面理解的话,是说一个类用到了另一个类。
- 这种使用关系是具有偶然性的、临时性的、非常弱的。
表现:如果A依赖于B,则B体现为局部变量
,方法的参数
、或静态方法
的调用。
class A{
private B b;
public setB(B b){
this.b = b;
}
}
在开发过程中,大量的用到了依赖关系。