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





