UML类图

UML类图

类的表示

普通类

在UML类图中,普通类在类图中使用矩形框表示,矩形框分为三个部分:第一个部分是类名称,第二个部分是类的字段和属性,第三个部分是类的方法

属性和方法前的访问修饰符用特定符号表示。

  • +:表示 public
  • -:表示 private
  • #:表示 protected
  • 无符号 or ~:表示 default
  • _: 表示 static 【有些人使用】
  • 斜体: 表示 abstract【有些人使用】

UML 类图规定

  • 属性的表示方式为 可见性 名称:类型 [= 默认值]
  • 方法的表示方式为 可见性 名称([参数列表]) [: 返回类型]

[ ]代表可选参数

类名
-字段: 数据类型 [= 默认值]
+属性: 数据类型
+PublicMethod(数据类型1 参数1, 数据类型2 参数2) : ReturnValueType

特殊类

在 UML 类图中,特殊类同样以矩形框表示。但是,特殊类的在类图中的第一层顶端用构造型 << >>表示。例如<<Abstract>>、<<Interface>><<Enum>>等等,词达意即可

«Abstract»
AbstractClass
+属性: 数据类型
+方法()

类的关系

类的关系具体细分共有六种类型

依赖关系
关联关系
聚合关系
组合关系
继承关系
实现关系
classA
classB
classC
classD
classE
classF
classG
classH
classI
classJ
classK
classL

我更愿意将这六种类型分为三大类,关联关系包含聚合和组合关系,继承和接口实现关系统称泛化关系

依赖关系
关联关系
聚合关系
组合关系
泛化关系
继承关系
实现关系

依赖关系

依赖关系使用虚线加箭头表示,依赖关系是指一个类在某个方法中需要借助其他类来完成,类A 要实现某个方法引用了 类 B ,此时 类 A 依赖 类 B

依赖关系
Cat
+eat(Food food)
Food
-name: string

在代码中,通常体现在某个类的方法中的形参、局部变量或对静态方法的调用,例如玩家控制器类 PlayerController 依赖于 Unity 引擎的 Input 类来获取玩家的键盘输入

public class PlayerController : MonoBehaviour
{
    private void Update()
    {
        // 依赖于 Input 类获取玩家的键盘输入
        float moveInput = Input.GetAxis("Horizontal");
        
        // 其他处理逻辑...
    }
}

关联关系

关联关系使用实线加箭头表示,关联关系是指一个类与另一个类之间的关系,关联关系有单向关联、双向关联、自身关联、多重关联、聚合关系、组合关系。

单向关联
双向关联
自身关联
-身份证: 身份证
身份证
-号码: string
学生
-老师: 老师
老师
-学生们: 学生[]
单例类
+Instance: 单例类

多重关联体现在基数,基数用于表达关联的类之间的数量关系,通常写在关联连线的两端。例如学生可以有多个老师,老师也可以有很多学生,但是他们只有一个校长

  • 1 一个
  • * 许多
  • a..b a 到 b 个
多重聚合
*
*
多重聚合
1
*
多重聚合
*
1
学生
-老师们: 老师[]
老师
-学生们: 学生[]
-校长: 校长
校长
-老师们: 老师[]

在代码中,通常将一个类的对象作为另一个类的属性,例如 Player 类包含了一个 Inventory 物品背包对象

class Player {
    public Inventory Inventory; // 玩家的物品背包
}
聚合关系

聚合关系用实线加空心菱形表示。聚合可以看做特殊的关联,用于表示集体与个体之间的关联关系,父类被销毁子类不会随之销毁。例如玩家和战队,玩家离开了战队依然可以存活

Player
- 名字: string
- 等级: int
- 战队: Team
+JoinTeam(Team 战队)
+LeaveTeam()
Team
- 名字: 字符串
- 玩家列表: Player[]
+招募玩家(Player 玩家)
组合关系

聚合关系用实线加实心菱形表示,组合也可以看做特殊的关联,用于表示个体与组成部分之间的关联关系,一旦父类被销毁子类也会随之销毁。例如玩家的状态类,玩家类销毁时状态类也会消失

Player
- PlayerStatus: PlayerStatus
PlayerStatus
- health: int
- isAlive: boo

泛化关系

泛化关系表示一般与特殊的关系,是父类与子类之间的关系。

继承关系

继承关系使用直线加空心三角形表示,在代码实现时,就是类的继承。例如,哥布林类和骷髅类都是 Enemy 类的子类

Enemy
+attack()
+move()
Goblin
Skeleton
实现关系

接口实现关系使用虚线加空心三角形表示,在代码实现时,就是接口的实现。例如玩家想要充值,于是提供了一个支付接口

«Interface»
Payment
+pay()
AlipayPayment
+pay()
WechatPayPayment
+pay()

总结

  • 依赖(Dependency):表示一个类在其方法中使用到了另一个类,伴随着方法的调用结束而销毁。
  • 关联(Association):表示一个类对象包含另一个类对象的成员。
    • 聚合(Aggregation):整体与部分弱关系,整体和部分之间在生命周期上没有什么必然的联系
    • 组合(Composition):整体与部分强关系, 整体与部分的生命周期是一致的
  • 泛化(Generalization):父类与子类之间的关系
    • 继承(Inheritance): 表示类之间的继承关系。
    • 实现(Realization):表示类和接口之间的实现关系。

不难看出依赖、关联、聚合、组合和泛化的耦合度逐渐增加,而聚合和组合从代码上是没办法区分的,只能从语义上区分,他们都属于关联。

参考链接

类图 - 维基百科,自由的百科全书 (wikipedia.org)

类图 | Mermaid 中文网 (nodejs.cn)

认识 UML 类关系——依赖、关联、聚合、组合、泛化_依赖关系-CSDN博客

UML图——类图详解 - 掘金 (juejin.cn)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值