1. 泛化关系(Generalization)- 继承
图示:
空心三角形箭头 + 实线,箭头从子类指向父类
例子:
// 父类
class Animal {
void eat() { }
}
// 子类
class Dog extends Animal {
void bark() { }
}
class Cat extends Animal {
void meow() { }
}
类图表示:
Dog Cat
↘ ↙
Animal
(箭头:Dog → Animal,Cat → Animal,空心三角形)
特点:
-
表示"is-a"关系
-
子类继承父类的属性和方法
-
代码中通过
extends关键字实现
2. 实现关系(Realization)- 接口实现
图示:
空心三角形箭头 + 虚线,箭头从实现类指向接口
例子:
interface Flyable {
void fly();
}
class Bird implements Flyable {
public void fly() {
System.out.println("鸟儿飞翔");
}
}
class Airplane implements Flyable {
public void fly() {
System.out.println("飞机飞行");
}
}
类图表示:
Bird Airplane
↘ ↙
─ ─ ─ Flyable ─ ─ ─
(箭头:Bird → Flyable,Airplane → Flyable,虚线+空心三角形)
3. 关联关系(Association)- 使用关系
图示:
普通实线箭头,箭头指向被关联的类
例子:
class Teacher {
private Student[] students;
}
class Student {
private Teacher teacher;
}
类图表示:
Teacher ─────→ Student
变种:双向关联
Teacher ───── Student
(无箭头,或双箭头)
4. 聚合关系(Aggregation)- 弱拥有
图示:
空心菱形箭头 + 实线,菱形在整体一端
例子:
class Classroom {
private List<Student> students;
// 教室和学生是聚合关系
// 教室销毁,学生仍然存在
}
类图表示:
Classroom ◇──── Student
(空心菱形在Classroom端)
特点:
-
表示"has-a"关系
-
部分可以脱离整体存在
-
生命周期不绑定
5. 组合关系(Composition)- 强拥有
图示:
实心菱形箭头 + 实线,菱形在整体一端
例子:
class House {
private Room livingRoom;
private Room bedroom;
// 房屋和房间是组合关系
// 房屋销毁,房间也不存在了
}
class Room {
// 房间不能脱离房屋独立存在
}
类图表示:
House ◆──── Room
(实心菱形在House端)
特点:
-
强关联关系
-
部分不能脱离整体存在
-
生命周期完全绑定
6. 依赖关系(Dependency)- 临时使用
图示:
虚线箭头,箭头指向被依赖的类
例子:
class Person {
// 依赖关系:临时使用,不是持久关联
void travel(Transportation vehicle) {
vehicle.move();
}
}
class Transportation {
void move() { }
}
类图表示:
Person - - - - → Transportation
(虚线箭头)
7. 包含关系(Include)- 用例间的包含
图示:
虚线箭头 + include,箭头从基础用例指向被包含的用例
例子:
// 在用例层面,不是代码层面
// 基础用例:网上购物
// 被包含用例:用户登录、支付确认
特点:
-
基础用例必须执行被包含的用例
-
被包含用例是基础用例的必要组成部分
-
箭头方向:基础用例 → 被包含用例
-
用虚线(依赖关系的变种)
8. 扩展关系(Extend)- 用例间的扩展
图示:
虚线箭头 + extend,箭头从扩展用例指向基础用例
特点:
可选性
-
扩展用例是可选的,不是必须执行的
-
基础用例可以独立存在,不需要扩展用例
条件触发
-
扩展关系通常有扩展点和触发条件
-
只有在特定条件下才会执行扩展用例
箭头方向
-
箭头从扩展用例指向基础用例
-
表示扩展用例"扩展"了基础用例的功能
总结对比表
| 关系类型 | 图示 | 代码表现 | 生命周期 | 强度 | 应用场景 |
|---|---|---|---|---|---|
| 泛化 (继承) | 空心三角+实线 子类→父类 | extends | - | 最强 | 类继承,is-a关系 |
| 实现 (接口) | 空心三角+虚线 实现类→接口 | implements | - | 强 | 接口实现 |
| 组合 (强拥有) | 实心菱形+实线 整体→部分 | 成员变量 (new创建) | 绑定 | 强 | 强关联,部分不能独立存在 |
| 聚合 (弱拥有) | 空心菱形+实线 整体→部分 | 成员变量 (外部传入) | 不绑定 | 中 | 弱关联,部分可独立存在 |
| 关联 (使用) | 实线箭头 源→目标 | 成员变量 | 不绑定 | 中 | 类间持久关联 |
| 依赖 (临时) | 虚线箭头 源→目标 | 参数/局部变量/ 静态方法调用 | 临时 | 弱 | 临时性使用 |
| 包含 (用例) | 虚线+include基础→被包含 | - | - | 强 | 用例必须执行的关系 |
| 扩展 (用例) | 虚线+extend扩展→基础 | - | - | 弱 | 用例可选执行的关系 |
470

被折叠的 条评论
为什么被折叠?



