面向对象-类与类的6大关系及UML图(多重度) 作者:马育民 • 2024-12-15 21:36 • 阅读:10035 # 类关系 在面向对象开发中,类之间有各种各样的相互关系,如下: - 泛化关系(继承) - 实现关系 - 依赖关系 - 关联关系 - 聚合关系 - 组合关系 >类关系以java为基础,python做了一些借鉴 # UML 为了说明类与类的关系,采用UML建模,关于UML参见: http://www.malaoshi.top/show_1EF2GcHIk5xB.html ### 箭头指向总结 A 类代码中,有B类,不论什么关系,箭头从 A 指向 B 组合、聚合特殊:菱形箭头指向 `整体`,另一头可能有箭头 # 泛化关系(继承) **UML类图** [](http://www.malaoshi.top/upload/0/0/1EF2GGMM6a9L.png) **说法:**`Son` 继承 `Father` **箭头方向:** 空心箭头实线,子类指向父类 # 实现 **代码体现**类实现接口 [](https://www.malaoshi.top/upload/0/0/1GWzulbTF7e.png) **特点:** 类`A` 是实现类, 图中的类 `B` 是接口 **说法:**`A` 实现 `B` **箭头方向:** 空心箭头虚线,实现类 指向 接口 # 依赖关系 **理解:**`依赖` 理解成 `需要` **代码体现:**类A使用类B作为局部变量、方法参数、返回值等。 [](https://www.malaoshi.top/upload/0/0/1GWztNT3Jdt.png) **特点:**`Teacher` 的 `updateStudentInfo(Student student)` 方法中用到 `Student` 类 **说法:**`Teacher` 依赖(需要) `Student` **箭头方向:**虚线箭头,指向 被使用者 # 关联关系 **代码体现:**A类的成员变量中含有B类。 **UML类图** [](http://www.malaoshi.top/upload/0/0/1EF2GGbXkIcb.png) **特点:** `A` 类的成员变量,含有 `B` 类 **说法:**`Teacher` 依赖 `Student` **箭头方向:**实线箭头,从A类指向B类 # 聚合关系 整体和部分的关系: 1. 代表了has-a的关系 2. 整体和部分之间是可分离的,部分可以属于多个整体 3. 整体和部分拥有 **各自的生命周期**。整体存在与否不会相互影响部分,反之亦然 **例子:**农民饲养鸡鸭鹅,农民可以有多个鸡鸭鹅,一个农民对应多只鸡鸭鹅,农民是 `整体`,鸡鸭鹅是 `部分`,而且 **有各自的生命周期**,是聚合关系 **代码体现:**作为整体的A类,有序列类型的属性,用于保存部分。如:学校类和学生类、公司类和员工类等,就属于聚合关系。 ### 例子 班级和教师、学生的关系,一个班级由一群学生和教师组成了,当班级解散后,教师和学生都还存在 [](https://www.malaoshi.top/upload/0/0/1GWzu3hLslk.png) **代码体现:**作为整体的 `ClassInfo` 类的成员变量有 `Student对象集合` **箭头方向:**空心菱形的实线,菱形指整体,另一头(可能有箭头)指部分 # 多重度 在关联关系、聚合关系、组合关系中,还要标出多重度,即:是 `0` 个,还是 `1` 个,还是 `n` 个: - `1` :表示1个对象 - `0..*` 或 `*` :表示集合中的0个或多个对象 - `1..*`:表示集合中的1个或多个对象 - `0..1`:表示一个集合中的0个或1个对象 ### 例子 - `1 → 0..*` :表示1个对象 对应 0或多个对象。(可以不对应) - `1 → 1..*` :表示1个对象 对应 0或多个对象。(至少对应一个) - `1..* → 0..*`:表示 1或多个对象 对应 0或多个对象。(可以不对应) # 组合关系 整体与部分的关系,这种 **关系比聚合更强**: 1. 代表contains-a的关系 2. 在组合的关系中,彼此依赖的,不可分割 3. 具有 **相同的生命周期**,整体被销毁,部分也会被销毁 **代码体现:**从代码上看,与聚合相同,只能 **从语义区分** ### 例子 教学楼和教室,有教学楼才有教室,如果教学楼被炸了,教室也会被炸掉 [](https://www.malaoshi.top/upload/0/0/1GWzuC0LXxa.png) **代码体现:**作为整体的 `ClassRoomBuilding` 类的成员变量有 `ClassRoom对象集合` **箭头方向:**实心菱形的实线,菱形指整体,另一头指部分 原文出处:http://malaoshi.top/show_1GWE6ackbj1.html