用PlantUML描绘C++世界:通过文本描述精准控制UML图的生成

往期本博主的 C++ 精讲优质博文可通过这篇导航进行查找:
Lemo 的C++精华博文导航:进阶、精讲、设计模式文章全收录

前言

在编写程序时,可视化的工具可以极大地帮助我们理解和设计复杂的系统。对于C++程序员来说,一个强大的工具是UML(统一建模语言)。PlantUML是一个流行的工具,可以帮助我们用文本来生成UML图。本文将讨论如何使用PlantUML来创建C++程序的UML类和关系图。

文章目录

    • 前言
    • PlantUML 简要介绍
    • 用 PlantUML 绘制 C++ UML 图的优势
    • 如何用 PlantUML 绘制 C++ UML 图
      • PlantUML 基础文件格式的描述
      • 类定义的描述
      • 类的成员变量描述
      • 抽象与静态成员描述
      • 类的关系描述
      • 类间连接线和箭头的描述
      • 类间箭头方向指定的描述
      • 类成员的链接关系描述
    • 总结

PlantUML 简要介绍

PlantUML 是一个开源工具,它让你用简洁的文本描述来生成 UML 图。PlantUML 广泛用于绘制各种类型的 UML 图,包括时序图、用例图、类图、活动图、组件图等。通过简单的文本命令,我们可以创建复杂的图表,使用起来非常方便。

用 PlantUML 绘制 C++ UML 图的优势

选择使用PlantUML来绘制C++的UML图相对于其他 UML 绘图工具有几个显著优势:

  1. 文本到图形的转换: PlantUML 的核心优势在于其使用简单的文本描述来生成 UML 图。这种方式相对于传统的拖拽界面,可以快速精确地创建和修改 UML 图。特别是对于软件开发人员而言,直接编写或修改代码形式的文本可能更加自然和高效。

  2. 版本控制友好: 由于 PlantUML 使用文本文件来生成图形,这使得 UML 图可以像源代码一样被版本控制。这意味着 UML 图的每次更改都可以被跟踪和回退,极大地提高了团队协作和项目维护的能力。

  3. 易于集成和自动化: PlantUML 可以轻松集成到许多开发工具和 IDE 中,并且可以通过命令行工具自动化生成图形。这使得它非常适合持续集成(CI)流程,能够自动化地生成和更新 UML 图,保持文档与代码的同步。

  4. 开源且跨平台: PlantUML是一个开源项目,支持跨多个平台运行。这使得它对于不同开发环境的用户来说是一个无缝的选择,无论他们使用的是Windows,macOS,还是Linux系统。

除了上述提到的这 4 点,PlantUML 在泛编程语言方面都能够支持广泛的UML图类型;并且由于其语法的简单直接,开发者在使用时,上手也快;同时它是通过文本形式编写,在传播和交流上面,较图片也更便捷。

可以说 PlantUML 为 C++ 开发者提供了一个高效、灵活、协作友好的方式来创建和维护UML图,这些特性使得它在众多UML工具中脱颖而出,适用于快节奏和持续变化的软件开发项目。

说了这么多好处,我们再来看下如何去用它绘制 C++ UML 图。

如何用 PlantUML 绘制 C++ UML 图

让我们来看一下用PlantUML绘制UML类图的实际过程。

PlantUML 基础文件格式的描述

@startuml
…
…
…
@enduml

基本上每个 PlantUML 文件的基本格式都是如上所示:

  • 文件头需要@startuml
  • 结束需要@enduml
  • 可以写@startuml name来指定 uml 图的名字

类定义的描述

结构如下:

@startuml
class classType1<<somethingCanBeDeleted>>{
int a
{field}int aa
double&function()
{method} func2
const character*whatever[]}
interface I22
@enduml

生成图如下:
在这里插入图片描述
class 的声明可替换为以下元素声明:
在这里插入图片描述
至于,类变量和类方法可使用小括号()区分,也可以用{field}声明变量,{method}声明方法。

类的成员变量描述

结构如下:

@startuml
class classType1<<somethingCanBeDeleted>>{
+int a
~double&b
#const character*whatever[]
}
interface I22
@enduml

生成的图如下:
在这里插入图片描述
说明:
在这里插入图片描述

抽象与静态成员描述

结构如下:

@startuml
class classType1<<somethingCanBeDeleted>>{
{abstract}+int a
#{static}double&b
~const character*whatever[]
}
@enduml

生成的图如下:
在这里插入图片描述
说明:

  • 抽象的成员(变量/函数)用斜体标识
  • 静态的成员(变量/函数)用下划线标识

类的关系描述

结构如下:

@startuml
classType1 --|> 泛化:一般到特殊的关系
classType1 --o 聚合:整体和部分,部分可单独存在
classType1 --* 组合:整体和部分,部分不能单独存在
class classType1 implements List
class classType1 extends AsbtractClass
@enduml

生成的图如下:
在这里插入图片描述
说明:
plantUML里指定了泛化,聚合,组合三种类间关系。此外,还提供了实现(implements),继承(extends)

若无特殊声明, implements指向的自动推断为interfaceextends指向的推断与原元素相同

类间连接线和箭头的描述

结构如下:

@startuml
class1 --> class2
class1 --o class3:这里写冒号对链接加注释
class2 ..> class3
class4 +-- class2
class4 --*  class5
class5 -- class2
class5 <--> "这里写引号添加注释" class3
@enduml

生成的图:
在这里插入图片描述
说明:

  • 连接关系最后添加:,可在连接线中断添加注释
  • 连接关系两头添加引号,则在两头添加注释

类间箭头方向指定的描述

结构如下:

@startuml
class1 -right-> class2
class1 --o class3
class2 .down.> class3
class4 +-down- class2
class4 -*  class5
class5 -left- class2
class5 <--> class3
@enduml

生成的图如下:
在这里插入图片描述
说明:

  • 用right,up,down,left来建议箭头的方向(可能被覆盖)
  • 实际上,双破折号–>默认为垂直方向,单破折号->默认为水平方向

类成员的链接关系描述

结构如下:

@startuml
class class1{
const int64*mp[]
double k
}
class class2
class class3{
member1
}
class1::mp -left-> class2:指向一个类
class1::k -right-> class3::member1:指向类内成员
@enduml

生成的图如下:
在这里插入图片描述
说明:

  • 在声明完类的成员变量后,单独指定成员的链接关系。
  • 指定class1const int64*mp[]成员时,用::声明来自class1,而后可直接使用mp
  • 指向对象可以是类,也可以是类的成员。

总结

通过使用PlantUML,C++开发者可以高效地创建和维护他们代码的UML图。这不仅帮助他们理解现有的代码基础,还能帮助新的开发者快速上手项目。

期望本文在帮助开发者在用 PlantUML 构建C++ UML 时,能有所帮助。

如果有疑惑的地方,欢迎私信交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/344338.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【漏洞复现】多客圈子论坛系统 httpGet 任意文件读取漏洞

0x01 产品简介 多客圈子论坛系统是一种面向特定人群或特定话题的社交网络&#xff0c;它提供了用户之间交流、分享、讨论的平台。在这个系统中&#xff0c;用户可以创建、加入不同的圈子&#xff0c;圈子可以是基于兴趣、地域、职业等不同主题的。用户可以在圈子中发帖、评论、…

自定义类型:结构体+结构体内存对齐+结构体实现位段

结构体内存对齐实现位段 一.结构体1.结构体的声明2.结构体变量成员访问操作符3.结构体传参4.匿名结构体5.结构的自引用 二.结构体内存对齐1.对齐规则2.为什么存在内存对齐&#xff1f;3.修改默认对齐数 三.结构体实现位段1.什么是位段2.位段的内存分配3.位段的跨平台问题4.位段…

【c语言】自定义类型----结构体

结构体是c语言的一种自定义类型&#xff0c;自定义类型对于开发者及其重要的类型&#xff0c;它可以随意由开发者进行谱写功能&#xff0c;而今天的结构体可以用来表示一种变量的单个或多种具体属性&#xff0c;再编写代码时有着不可替代的作用&#xff01;&#xff01;&#x…

分享一个按钮代码,主要有html,svg及css动画实现

按钮展示: Switch by Galahhad made with CSS | Uiverse.io 源代码: css .theme-switch {--toggle-size: 30px;/* the size is adjusted using font-size,this is not transform scale,so you can choose any size */--container-width: 5.625em;--container-height: 2.5em;-…

【Vue】面经基础版-案例效果分析

面经效果演示 功能分析 通过演示效果发现&#xff0c;主要的功能页面有两个&#xff0c;一个是列表页&#xff0c;一个是详情页&#xff0c;并且在列表页点击时可以跳转到详情页底部导航可以来回切换&#xff0c;并且切换时&#xff0c;只有上面的主题内容在动态渲染 实现思路…

连山露【诗词】

连山露 雾隐黄山路&#xff0c;十步一松树。 树上惊松鼠&#xff0c;松子衔木屋。 松子青嫩芽&#xff0c;尖尖头探出。 卷挂白露珠&#xff0c;装映黄山雾。

HTML静态网页成品作业(HTML+CSS)—— 节日端午节介绍网页(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 二、作品演示 三、代…

嵌入式学习——4——C++中的动态内存分配和回收(堆区)

1、内存的分配与回收 C语言中使用的是malloc和free函数进行动态内存分配和回收的。 C中依然可以使用上述的两个函数来完成动态内存分配和回收的。 C也给用户提供了两个关键字new、delete来完成动态内存分配和回收的 单个分配、回收 //在堆区申请了int类型的大小空间&#xff0c…

内存管理--4.用幻灯片讲解内存分配器Allocator

用幻灯片讲解内存分配器Allocators Allocators 内存分配器 提供内存分配策略的通用接口委托给 C 运行时&#xff1a;new / delete使用块内存池管理内存使用不同大小的块内存池管理内存 为什么用分配器? 将容器逻辑与内存分配策略解耦速度&#xff1a;内存分配速度慢确保…

NVeloDocx一个基于NVelocity的word模版引擎

NVeloDocx是一个基于NVelocity的Word模版引擎&#xff0c;目前主要是用于E6低代码开发平台供用户轻松制作各种Word报告模版。 有以下优点&#xff1a; 1、完全的NVelocity语法&#xff1b; 2、直接在Word中写NVelocity脚本&#xff0c;使用非常非常方便&#xff1b; 3、完全兼…

植物大战僵尸杂交版最新2.0.88手机+电脑+苹果+修改器

在这个充满奇妙的平行宇宙中&#xff0c;植物和僵尸竟然能够和谐共存&#xff01;是的&#xff0c;你没听错&#xff01;一次意外的实验&#xff0c;让这两个看似对立的生物种类发生了基因杂交&#xff0c;创造出了全新的生物种类——它们既能够进行光合作用&#xff0c;也具备…

网络安全快速入门(十五)(下)手动创建用户及su,sudo命令

15.8 序言 前面我们已经大概了解了创建用户一些相关文件&#xff0c;接下来我们来手动创建用户&#xff0c;话不多说&#xff0c;我们直接开搞&#xff01;&#xff01;&#xff01; 15.9 手动创建用户&#xff1a; 一般来讲&#xff0c;我们创建用户通过useradd和passwd命令来…

Docker run 命令常用参数详解

Docker run 命令提供了丰富的参数选项&#xff0c;用于配置容器的各种设置。以下是docker run命令的主要参数详解&#xff0c; 主要参数详解 后台运行与前台交互 -d, --detach: 在后台运行容器&#xff0c;并返回容器ID。-it: 分配一个伪终端&#xff08;pseudo-TTY&#xff0…

初识C++ · 模拟实现list

目录 前言 1 push_back pop_back 2 迭代器类 2.1 ! 2.2 -- 2.3 * 3 Print_List 4 有关自定义类型 5 有关const迭代器 6 拷贝构造 赋值 析构 Insert erase 前言 有了string&#xff0c;vector的基础&#xff0c;我们模拟实现list还是比较容易的&#xff0c;这里同…

移动端投屏到大屏幕的操作详解

如果你懒得折腾电脑、电视或其他大屏设备上的影视软件安装及配置&#xff0c;可以选择直接在手机端上将影片投屏到电脑、电视或其他大屏设备上&#xff0c;这里给大家分享三种手机投屏的方法。 系统自带的投屏功能 不管是安卓、鸿蒙还是苹果操作系统&#xff0c;都自带了无线…

【python】OpenCV—Blob Detection(11)

学习来自OpenCV基础&#xff08;10&#xff09;使用OpenCV进行Blob检测 文章目录 1、cv2.SimpleBlobDetector_create 中文文档2、默认 parameters3、配置 parameters附录——cv2.drawKeypoints 1、cv2.SimpleBlobDetector_create 中文文档 cv2.SimpleBlobDetector_create 是 O…

关于使用南墙waf防护halo网站主页请求404报错的解决方案

文章目录 环境说明问题展示原因探究解决方法 环境说明 在1panel应用商店&#xff0c;部署南墙waf(docker版)halo(2.16.1社区版)注意部署过程中注意uuwaf必须勾选允许外部访问&#xff0c;halo可以不勾选[这里为了证明确实是南墙waf的原因&#xff0c;选择勾选] 问题展示 使…

ChatGPT-4o体验demo

OpenAI 最近推出了其最新的人工智能语言模型——GPT-4O。该模型是在原有 GPT-4 的基础上进行优化而成&#xff0c;旨在提升生成质量和响应速度。GPT-4O 采用了更加高效的架构设计&#xff0c;使其在处理复杂文本时表现出更快的速度和更高的准确性。GPT-4O 在训练过程中融入了最…

3D打印随形水路:模具水路的革命性技术

在快速发展的模具制造行业中&#xff0c;3D打印技术以其独特的优势正在引领一场技术革命。其中&#xff0c;3D打印随形水路技术&#xff0c;凭借其灵活性和定制化设计的能力&#xff0c;为模具带来了前所未有的变革。 模具3D打印随形水路技术&#xff0c;是一种利用3D打印技术制…

【RISC-V】站在巨人的肩膀上——看开源芯片、软件生态、与先进计算/人工智能/安全的结合

目录 会议议程前言开源处理器芯片的机遇与挑战&#xff0c;孙凝晖&#xff0c;中国工程院院士RISC-V原生基础软件栈&#xff0c;武延军&#xff0c;中国科学院软件研究所RISC-V推动新型架构创新&#xff0c;孟建熠&#xff0c;浙江大学 专题一&#xff1a;开源芯片开源高性能 R…