文章目录
- Mermaid 语法与符号含义详解(含 C++ 应用)
- 1. Mermaid 在 C++ 中的应用场景
- 2. Mermaid 基础语法与符号含义
- 3. Mermaid 符号含义详解
- 4. 在 C++ 中使用 Mermaid 的方法
- 5. 实际应用示例
- 6. 工具推荐
- 总结
- 补充:组合、聚合、关联区别
Mermaid 语法与符号含义详解(含 C++ 应用)
Mermaid 是一种通过文本生成图表的工具,支持流程图、类图、时序图等多种图表类型。在 C++ 开发中,Mermaid 可用于代码注释、文档说明或系统设计,帮助开发者直观表达逻辑关系和结构。
1. Mermaid 在 C++ 中的应用场景
- 代码注释中的流程图:描述函数调用流程、算法逻辑等。
- 文档生成工具集成:通过 Doxygen 等工具,自动生成类图、时序图。
- 项目文档说明:在 Markdown 或 HTML 中描述类关系、状态机等。
2. Mermaid 基础语法与符号含义
2.1 流程图(Flowchart)
graph TD
A[开始] --> B{条件判断}
B -->|是| C[操作1]
B -->|否| D[操作2]
- graph TD
:从上到下的流程图(Top Down)。
- 节点符号:
– []
:矩形节点(操作步骤)
– {}
:菱形节点(条件判断)
- 箭头符号:
– -->
:实线箭头(流程方向)
– |标签|
:箭头标签(条件分支)
2.2 类图(Class Diagram)
classDiagram
class Animal {
+String name
+void eat()
}
class Dog {
+String breed
+void bark()
}
class Kennel {
+Dog* dogs[10]
}
Animal <|-- Dog
Kennel "1" *-- "0..10" Dog
- classDiagram
:定义类图。
- 继承(Inheritance):
– A <|-- B
:B
继承自 A
。
- 组合(Composition):
– *--
:实线带黑色菱形,表示强所有权关系(部分不能独立于整体存在)。
– 示例:Kennel *-- Dog
表示 Kennel
是 Dog
的容器,Dog
的生命周期由 Kennel
管理。
- 聚合(Aggregation):
– o--
:空心菱形,表示弱所有权关系(部分可独立存在)。
– 示例:Team o-- Player
表示 Team
包含 Player
,但 Player
可属于多个 Team
。
- 关联(Association):
– --
:普通关联,表示两个类之间的直接关系。
- 依赖(Dependency):
– ..>
:虚线箭头,表示一个类依赖另一个类。
2.3 时序图(Sequence Diagram)
sequenceDiagram
participant User
participant Server
User->>Server: GET /data
Server-->>User: 200 OK
- participant
:定义参与者。
- 箭头符号:
– ->>
:实线箭头(消息发送)
– -->>
:虚线箭头(消息返回)
2.4 状态图(State Diagram)
stateDiagram
[*] --> Idle
Idle --> Running: start()
Running --> Idle: stop()
- [*]
:初始状态。
- 状态转换:通过箭头标签表示触发条件。
3. Mermaid 符号含义详解
符号/关键字 | 含义 | 示例 |
---|---|---|
graph TD | 从上到下的流程图 | graph TD A --> B |
classDiagram | 类图 | classDiagram class A {} |
A <|-- B | 继承(B 继承自 A) | Animal <|-- Dog |
A *-- B | 组合(强所有权) | Kennel *-- Dog |
A o-- B | 聚合(弱所有权) | Team o-- Player |
A -- B | 关联 | Student -- Course |
A ..> B | 依赖 | Logger ..> File |
participant | 时序图中的参与者 | participant User |
A ->> B | 实线箭头(消息发送) | User ->> Server: Request |
[*] | 初始状态(状态图) | [*] --> Idle |
|标签| | 箭头标签(条件分支) | B -->|是| C |
4. 在 C++ 中使用 Mermaid 的方法
4.1 在代码注释中嵌入 Mermaid
例如,在 Doxygen 注释中添加类图:
/**
* @brief 动物类及其子类
*
* @mermaid
* classDiagram
* class Animal {
* +virtual void eat()
* }
* class Dog {
* +void bark()
* }
* Animal <|-- Dog
*/
class Animal {
public:
virtual void eat() = 0;
};
4.2 使用命令行工具生成图表
1. 安装 Mermaid CLI:
npm install -g @mermaid-js/mermaid-cli
2. 创建 Mermaid 文件(如 class-diagram.mmd
):
classDiagram
class Kennel {
+Dog* dogs[10]
}
Kennel *-- Dog
3. 生成 SVG/PNG 图像:
mmdc -i class-diagram.mmd -o class-diagram.png
4.3 在 Markdown 文档中嵌入 Mermaid
在 README.md 或项目文档中添加类图:
classDiagram
class Team {
+Player players[11]
}
Team o-- Player
5. 实际应用示例
5.1 C++ 类继承与组合关系
classDiagram
class Shape {
+virtual double area()
}
class Circle {
+double radius
+double area() override
}
class Rectangle {
+double width
+double height
+double area() override
}
Shape <|-- Circle
Shape <|-- Rectangle
class Drawing {
+Shape* shapes[100]
}
Drawing *-- Shape
5.2 时序图:HTTP 请求流程
6. 工具推荐
- Mermaid Live Editor:在线实时预览 Mermaid 图表(https://mermaid.live)。
- VS Code 插件:安装
Mermaid Diagram
插件,支持 Markdown 中的 Mermaid 预览。 - Doxygen:通过插件支持 Mermaid 图表渲染到 HTML 文档中。
总结
通过 Mermaid 的语法和符号,开发者可以在 C++ 项目中清晰地表达逻辑关系、类结构和交互流程。
补充:组合、聚合、关联区别
关系类型 | 符号 | 语义说明 | 是否符合 shared_ptr 语义 |
---|---|---|---|
组合(Composition) | *-- | 强所有权,整体与部分的强依赖(如人体与心脏)。 | ❌ 不符合 |
聚合(Aggregation) | o-- | 弱所有权,整体与部分的松散关联(如学校与学生)。 | ✅ 部分符合 |
关联(Association) | --> | 无所有权,仅表示引用关系。 | ✅ 完全符合(需添加注释) |