UML类图
类的表示
普通类
在UML类图中,普通类在类图中使用矩形框表示,矩形框分为三个部分:第一个部分是类名称,第二个部分是类的字段和属性,第三个部分是类的方法
属性和方法前的访问修饰符用特定符号表示。
+
:表示public
-
:表示private
#
:表示protected
无符号
or~
:表示default
_
: 表示static
【有些人使用】斜体
: 表示abstract
【有些人使用】
UML 类图规定
- 属性的表示方式为
可见性 名称:类型 [= 默认值]
- 方法的表示方式为
可见性 名称([参数列表]) [: 返回类型]
[ ]
代表可选参数
特殊类
在 UML 类图中,特殊类同样以矩形框表示。但是,特殊类的在类图中的第一层顶端用构造型 << >>
表示。例如<<Abstract>>、<<Interface>>
、<<Enum>>
等等,词达意即可
类的关系
类的关系具体细分共有六种类型
我更愿意将这六种类型分为三大类,关联关系包含聚合和组合关系,继承和接口实现关系统称泛化关系
依赖关系
依赖关系使用虚线加箭头表示,依赖关系是指一个类在某个方法中需要借助其他类来完成,类A
要实现某个方法引用了 类 B
,此时 类 A
依赖 类 B
在代码中,通常体现在某个类的方法中的形参、局部变量或对静态方法的调用,例如玩家控制器类 PlayerController
依赖于 Unity 引擎的 Input
类来获取玩家的键盘输入
public class PlayerController : MonoBehaviour
{
private void Update()
{
// 依赖于 Input 类获取玩家的键盘输入
float moveInput = Input.GetAxis("Horizontal");
// 其他处理逻辑...
}
}
关联关系
关联关系使用实线加箭头表示,关联关系是指一个类与另一个类之间的关系,关联关系有单向关联、双向关联、自身关联、多重关联、聚合关系、组合关系。
多重关联体现在基数,基数用于表达关联的类之间的数量关系,通常写在关联连线的两端。例如学生可以有多个老师,老师也可以有很多学生,但是他们只有一个校长
1
一个*
许多a..b
a 到 b 个
在代码中,通常将一个类的对象作为另一个类的属性,例如 Player 类包含了一个 Inventory 物品背包对象
class Player {
public Inventory Inventory; // 玩家的物品背包
}
聚合关系
聚合关系用实线加空心菱形表示。聚合可以看做特殊的关联,用于表示集体与个体之间的关联关系,父类被销毁子类不会随之销毁。例如玩家和战队,玩家离开了战队依然可以存活
组合关系
聚合关系用实线加实心菱形表示,组合也可以看做特殊的关联,用于表示个体与组成部分之间的关联关系,一旦父类被销毁子类也会随之销毁。例如玩家的状态类,玩家类销毁时状态类也会消失
泛化关系
泛化关系表示一般与特殊的关系,是父类与子类之间的关系。
继承关系
继承关系使用直线加空心三角形表示,在代码实现时,就是类的继承。例如,哥布林类和骷髅类都是 Enemy 类的子类
实现关系
接口实现关系使用虚线加空心三角形表示,在代码实现时,就是接口的实现。例如玩家想要充值,于是提供了一个支付接口
总结
- 依赖(Dependency):表示一个类在其方法中使用到了另一个类,伴随着方法的调用结束而销毁。
- 关联(Association):表示一个类对象包含另一个类对象的成员。
- 聚合(Aggregation):整体与部分弱关系,整体和部分之间在生命周期上没有什么必然的联系
- 组合(Composition):整体与部分强关系, 整体与部分的生命周期是一致的
- 泛化(Generalization):父类与子类之间的关系
- 继承(Inheritance): 表示类之间的继承关系。
- 实现(Realization):表示类和接口之间的实现关系。
不难看出依赖、关联、聚合、组合和泛化的耦合度逐渐增加,而聚合和组合从代码上是没办法区分的,只能从语义上区分,他们都属于关联。
参考链接
类图 - 维基百科,自由的百科全书 (wikipedia.org)