UML、mermaid在代码中的表现形式

UML类图中类与类之间的关系如下所示:

classDiagram classA --|> classB : Inheritance classC --* classD : Composition classE --o classF : Aggregation classG --> classH : Association classI -- classJ : Link(Solid) classK ..> classL : Dependency classM ..|> classN : Realization

Inheritance( 继承、泛化关系 )

classDiagram classA --|> classB : Inheritance

很简单,A继承于B

ts 复制代码
class classB { }
class classA extends classB { }

Composition( 组合 )

classDiagram classC --* classD : Composition

实心的菱形,代表整体与部分中的组合关系。组合表示整体与部分的关系,且部分不能脱离整体而存在。通常在整体类中直接实例化部分类,并在整体类销毁时,部分类也会销毁。简单的举例:公司与部门的关系。公司死,部门肯定也不存在了,且部门不能独立于公司存在。

ts 复制代码
class classD { }
class classC {
  private d: classD;
  constructor() {
    this.d = new classD();
  }
}

Aggregation( 聚合 )

空心菱形。同样是表达整体与部分的关系。但是两者之间可以独立存在。

classDiagram classE --o classF : Aggregation
ts 复制代码
class classF {}
class classE {
    constructor(public f: classF) {} // classF 从外部注入,独立存在
}

// 使用示例
const f = new classF();
const e = new classE(f);  // classF 可独立于 classE 存在

Association( 关联 )

classDiagram classG --> classH : Association

简单的引用关系(无所有权)。此处代码表示和聚合非常相似。但是两者的语义不一样。

特性 聚合 (Aggregation) 关联 (Association)
关系本质 整体-部分关系(Whole-Part) 对象间平等协作
生命周期依赖 部分可独立于整体存在 完全独立
代码特征 引用来自外部(构造函数/方法传入) 引用可以是任意方式建立
UML语义 ◇ 空心菱形 (整体端) 普通箭头或直线
设计意图 "由...组成"(has-a) "使用..."/"链接..." (uses-a)
典型例子 汽车和轮子,学校和教师 学生选课程,用户使用支付服务
ts 复制代码
class classH {}
class classG {
    constructor(public h?: classH) {} // 可选关联
}

// 使用示例
const h = new classH();
const g = new classG(h);  // classG 持有 classH 的引用

Link-Solid其实是Association关联关系的一种表现形式,Association通常代表单向的关联,而Link-Solid代表双向。

classDiagram classI -- classJ : Link(Solid)
ts 复制代码
class classJ {}
class classI {
    j: classJ;  // 双向关联
    linkJ(target: classJ) {
        this.j = target;
    }
}

Dependency( 依赖 )

classDiagram classK ..> classL : Dependency

临时性依赖(无持久化引用)

ts 复制代码
class classL {}
class classK {
    doSomething(param: classL) {  // 临时依赖(参数/局部变量)
        const temp = new classL(); // 或局部创建
    }
}

Realization( 实现 )

虚线箭头代表实现关系。

classDiagram classM ..|> classN : Realization
ts 复制代码
interface classN {}       // 接口定义
class classM implements classN {}  // classM 实现 classN 的接口
相关推荐
weixin_4569042714 天前
数据库设计与UML图
数据库·uml
希赛网18 天前
软考软件设计师常考知识点:(一)计算机组成与体系结构
软考·uml·编程语言·计算机基础·软件设计师
rolt19 天前
[pdf、epub]320道《软件方法》强化自测题业务建模需求分析共279页(202509更新)
产品经理·ddd·架构师·uml·领域驱动设计
攻心的子乐21 天前
软考 UML类图 泛化继承 实现 聚合 组合(最强) 依赖(最弱
uml
攻心的子乐23 天前
软考 UML 用例图 extend扩展关系 include包含关系 泛化继承inherit关系
uml
「QT(C++)开发工程师」1 个月前
UML | 最好的类图设计工具结合CSDN天启呈现-领路架构师
数据库·uml·类视图
小鱼儿LY1 个月前
软考系统架构设计师之UML统一建模语言
系统架构·软考·uml·架构设计师
workflower2 个月前
GitHub宕机自救指南
测试用例·需求分析·uml·敏捷流程·结对编程
青草地溪水旁2 个月前
Astah UML 中,状态机(State Machine)的建模最合适使用「UML 状态图(State Diagram)」
uml·状态机
Liquad Li2 个月前
UML(统一建模语言)详解
架构·uml