作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。
依赖、关联(包括组合和聚合)、泛化和实现是面向对象设计中用于描述类与类之间关系的术语。它们在UML(统一建模语言)中被广泛使用,以帮助设计和理解系统的结构和行为。下面是这些概念的简要讲解以及它们之间的区别:
依赖表示一个类依赖于另一个类的情况。如果一个类的变化会影响到另一个类,则可以说这两个类之间存在依赖关系。依赖通常是使用类方法中的局部变量、方法的参数或者静态方法的调用来表示的。
关联是两个类之间的语义连接,表示一类对象与另一类对象之间有联系。关联可以是双向的,也可以是单向的。关联有两种特殊形式:聚合和组合。
泛化是一种表示类与类之间的继承关系的方法。它用于表示一般与特殊的关系,其中一个更通用的类(父类)派生出一个或多个更特殊的类(子类)。泛化关系中的类具有“是一个”(is-a)的关系。
实现关系用于表示类与接口之间的关系。当一个类实现一个接口时,它必须实现接口中定义的所有方法。实现关系表示类是按照接口定义的协议进行实现的。
类型 | 描述 | 符号 | 例子 |
---|---|---|---|
依赖 | 一个类的改变影响另一个类 | 点线箭头 | 类A使用类B的方法 |
关联 | 两个类以某种方式相关联 | 实线箭头 | 学生和班级 |
聚合 | 整体与部分的关系,部分可以独立于整体 | 空心菱形加实线箭头 | 班级和学生 |
组合 | 整体与部分的关系,部分不能独立于整体 | 实心菱形加实线箭头 | 人和心脏 |
泛化 | 表示类与类之间的继承关系 | 实线空心箭头 | 车辆类继承于交通工具类 |
实现 | 表示类与接口之间的关系,类必须实现接口中定义的所有方法 | 虚线空心箭头 | 一个类实现一个接口 |