(1·UML,伪代码,代码规范,sourcetrail)
UML
作用
Unified Modeling Language,可视化建模语言
作用:直观的表示系统结构, 便于开发者、设计师和客户之间的沟通
分类
UML图可分为两大类:
结构型图(静态图)
- 类图(Class Diagram)描述系统的静态结构
- 对象图(Object Diagram) 展示某一时刻的对象实例及其关系
- 组件图(Component Diagram) 描述系统的物理组件及其依赖关系
- 部署图(Deployment Diagram) 展示软件在硬件上的部署方式
- 包图(Package Diagram) 描述系统的模块化组织(包、命名空间)
行为型图(动态图)
- 用例图(Use Case Diagram) 描述系统的功能需求(用户与系统交互)
- 活动图(Activity Diagram) 描述业务流程或算法流程
- 状态图(State Machine Diagram) 描述对象的状态变化
- 顺序图(Sequence Diagram) 展示对象之间的交互(时间顺序)
- 通信图(Communication Diagram) 展示对象之间的协作关系
- 时序图(Timing Diagram) 描述时间约束下的对象交互
UML类图
基本组件:
类名、属性、方法
可见性修饰符:
- ’+’ 公有(Public)
- ’-‘ 私有(Private)
- ’#’ 受保护(Protected)
关系
注:图中大雁和雁群的关系画反了,大雁和企鹅不能构成双向关联,企鹅不能拥有气候
- 泛化(Generalization)
- 实线三角: 继承关系(独立存在,从一个类泛化出),指向基类
- 例子:鸟继承动物
- 实现(Realization)
- 虚线三角:实现关系(对接口的实现),指向接口
- 例子:大雁实现飞翔
- 关联(Association)
- 实线箭头: 关联关系(独立存在,不会彼此包含,一个类知道另一个类的属性和方法,比依赖更持久),指向被关联者
- 例子:气候对企鹅有影响
- 依赖(Dependency)
- 虚线箭头:使用的关系(一个类的实现需要另一个类的协助),指向被使用者
- 例子:动物依赖于氮气和水
- 聚合(Aggregation
- 空菱形:整体与部分的关系,且部分可以离开整体而单独存在,菱形指向整体
- 例子:雁群包含燕子,燕子可以单独存在
- 组合(Composition)
- 实心菱形:整体与部分的关系,但部分不能离开整体而单独存在,菱形指向整体
- 例子:鸟包含翅膀,但翅膀不能单独存在
draw.io使用
UML绘图工具之一
- 画板平移:鼠标右键/中键
- 框选:鼠标左键
- 创建:从左侧UML节点模板,拖拽出来 / 直接点击(出现在画板中心)
- 移动节点:在className方框上拖拽 / 框选(拖拽多个)
- 改变节点大小旋转:点击className方框,通过出现的蓝色实心原点缩放,拖拽右上的旋转图标旋转
- 隐藏:节点左上点击-号可以隐藏,+号可以展开
- 编辑:双击text可以编辑
- 添加属性/方法:单击节点的属性/方法,左右会出现箭头,选择添加
- 删除属性/方法:单击节点的属性/方法,按下delete键
- 添加关联:点击空白处取消选择,鼠标悬停在节点上,出现数个空心小圆形在外轮廓上,拖拽添加关联,
- 修改关联:单机关联,右侧样式面板改变关联样式,关联上的蓝色实心原点改变线条位置
- 添加关联节点:点击空白处取消选择,鼠标悬停在节点上,上下左右出现箭头,选择添加
伪代码
伪代码是介于自然语言和编程语言之间的一种描述语言, 不依赖于语法,通过简洁,逻辑清晰,统一的描述,突出算法流程/逻辑结构,让使用不同编程语言的程序员理解思路
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
algorithm: 二分查找
author: ……
date: ……
Input: 有序数组 arr, 目标元素 tar
Output: 目标元素 tar 在数组 arr 中的下标 index
function binary_search(arr, tar)
left <- 0, right <- arr.length - 1
while left <= right do
mid <- (left + right) / 2;
if arr[mid] == tar then
return mid;
else if arr[mid] < tar then
left <- mid + 1;
else
right <- mid - 1;
end if
end while
return -1;
end function
展开
说明信息:作用,作者,时间,输入:Input,输出:Output……
- 规范
- 每一条指令占一行,指令后不跟任何符号
- 注释:
- //C++ 风格的注释
- 算法名称
- 函数(Function) + < funcName > (args……) ,return ……,end function
- 变量:
- 定义:单个字符
- 赋值
- :=
- <-
- =
- 交换:a <-> b
- 运算
- ^ 幂运算
- mod 取模
- and 逻辑与
- or 逻辑或
- not 逻辑非
- xor 逻辑异或
- == 等于
- != 不等于
- / 除号
- ‘*’ 乘号
- ++ 自增
- – 自减
- 分支
- if语句 / if else语句, then,end if
- 循环
- 计数式循环(for循环)+ end for
- 条件式循环(while循环)+ do + end while
- 遍历 for each i in A do ,+ end for
代码规范
- 注释:
- 默认使用英文,禁止中英混用
- 缩进:应保持相同层级
- 所有头文件、对象包括成员,都应该添加注释
- 位置:声明/定义的位置
- 在上方(单行// 、 多行/* */) 或 右侧(///< xxxx)注释
- 文件注释 /** */
- 代码结束标记 } // End of (xxx)
- 类内:public 变量、public 函数,private 变量、private 函数
- if
- 指针应与nullptr比较,不得省略
- 布尔/整数/浮点变量与零值比较
- else应该换行
- 左{ 应换行
- swich:case结尾加break,最后为default分支
- enum:最后应为count
- 空格:
- 不同性质的代码要添加1行
- 连续超过10行的代码 要添加1行
- 标识符前后、逗号、指针*后、关键字后(while……)、运算符前后 要留1个空格
- 函数间 2行、函数声明和函数体 1行、头文件 1行
- 一行超过120字符,要换行并对齐,从断点位置拆分
- 代码数:
- 一个函数代码行数不超过50行
- 一个类不超过1000行
- 指针:应使用智能指针,如果使用内置指针则释放内存后应置为nullptr
- 结构体:按字节大小降序排列(节省内存)
- 变量:声明变量时立即赋予初始值
- 函数:如果传递大数据,应用指针
- 命名规范
- 常见
- 驼峰法:
- 大驼峰:每个单词的首字母大写,其他小写
- 小驼峰:除了第一个单词,其余每个单词的首字母大写,其他小写
- 下划线:每个单词间使用_下划线
- 全部大写
- 短划线:每个单词间使用-短划线
- 匈牙利:前缀
- 驼峰法:
- 文件:下划线
- 命名空间/类/结构体/枚举/类型别名:大驼峰,应该简洁
- 函数:小驼峰,应该清晰
- 局部变量:下划线,应该清晰
- 成员变量:匈牙利m + 下划线
- 全局变量:匈牙利g + 下划线
- 静态变量:匈牙利s + 下划线
- 布尔变量:匈牙利is + 下划线
- 宏/枚举成员:全部大写 + 下划线
- 常量:匈牙利k + 全部大写 + 下划线
- 常见
everything
- 不显示:在工具->选项->强制重建
Ninja忍者
- 概念:
- MSBuild:cl.exe
- 通过-G “Visual Studio 17 2022”生成Visual Studio 工程 xxx.sln 文件
- Visual Studio 2022” 是一个 Generator,其实是VS2022 安装目录下的一个名为 msbuild.exe 的可执行文件
- msbuild.exe 所在位置:cmake正常构建后存在build/CMakeFiles/CMakeConfigureLog.yaml文件,里面写了msbuild.exe的路径
- msbuild.exe创建时机:在安装 Visual Studio 是创建的
- Ninja: clang,gcc, cl.exe
- 生成的目录中, 没有 .sln, 也没有 .vcxproj 文件
- 生成 build.ninja 文件
- 优势
- 速度:极快
- 更精确的依赖跟踪
- MSBuild:cl.exe
- 下载:
- 仓库
- 下载ninja-win.zip,解压后只有一个exe文件
- 添加到环境路径即可
- ninja –version 验证
- 构建错误:
- CMake was unable to find a build program corresponding to “Ninja”.
- Cmake找不到环境变量,通过带有环境变量的Developer Command Prompt for VS 2022启用vscode
- CMake was unable to find a build program corresponding to “Ninja”.
sourcetrail源追踪
- 核心:可视化代码阅读工具,它支持多种编程语言包括 C、C++、Python 和 Java
- 作用:帮助开发者理解复杂的代码库
- 生成project:
- 获取完整编译指令:
- 对于CMake项目,cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -B build -S .,生成项目,同时会生成compile_commands.json,如果已经构建完成,可以直接cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 .
- 如果使用msbuild生成器,会忽略不会生成json文件,它仅支持在Makefile生成器和Ninja生成器,因此我们使用Ninja生成器
- 非cmake项目,有官方的插件,比如Visual Studio的sourtrail extension扩展
- 对于CMake项目,cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -B build -S .,生成项目,同时会生成compile_commands.json,如果已经构建完成,可以直接cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 .
- 创建new project:指定project name,project location(这里应为源码的根目录)
- 建立代码索引:
- 添加元组source group:选择compilation database编译数据库:它会读取json文件解析C++源文件,提取所有信息:类、函数、变量、宏、继承关系、调用关系等,存储到本地数据库中
- 选择json文件,点击创建
- 等待一会出现Finished Indexing就完成了
- 获取完整编译指令:
- 使用:
- 快捷键
- 后退Alt + ←
- 前进Alt + →
- 新建标签页Ctrl + T
- 关闭标签页Ctrl + W
- 切换标签页Ctrl + Tab
- 新建项目Ctrl + N
- 打开项目Ctrl + O
- 搜索视图
- 搜索Ctrl + F
- 查找文本Ctrl + Shift + F
- 打开收藏夹Ctrl + B
- 刷新索引F5
- 图形视图:
- ctrl+滚轮:缩放
- 左键:拖拽
- 搜索视图:左上视图
- 后退,历史记录,前进,刷新(重新索引),回初始界面,过滤器(支持正则匹配),创建收藏(将当前),收藏夹(可以快速跳转)
- 代码视图
- 操作:
- 不同文件可以展开折叠
- 单机变量可以跳转
- 上面:
- 引用可以跳转
- 展示错误(用不到)
- 右侧可以展开折叠所有文件
- 操作:
- 图形视图
- 快捷键
本文由作者按照 CC BY 4.0 进行授权



