核心结论,UML 类图是面向对象设计里面最常用的静态结构图,核心就是把系统里面的类拆成类名 属性 方法三部分,再用连线表达类和类之间的关系,比如继承 实现 关联 聚合 组合 依赖,画的时候优先理清业务对象,确定每个类有哪些属性和方法,再梳理类之间的关联关系,最后使用绘图工具按照 UML 标准规范完成图形,它主要用来在编码之前做设计,方便团队理解系统结构,不管是软件工程课设还是项目开发都经常使用,新手最容易出错的地方就是混淆聚合和组合,还有关系箭头方向画反。
为什么要画 UML 类图,面向对象编程是把业务拆成一个个对象,如果直接写代码很容易类设计混乱,类职责重复,类之间耦合过高,UML 类图可以在设计阶段可视化全部类结构,提前发现设计缺陷,统一团队认知,属于需求分析到编码中间的设计产物,UML 是统一建模语言,类图专门描述静态结构,不会描述程序运行的动态流程,动态流程需要搭配时序图活动图。
类的标准结构
每个类图形是一个矩形,内部分成上中下三层
第一层 类名,必须加粗,首字母大写,抽象类名称使用斜体
第二层 属性,格式是 可见性 属性名 类型,可见性符号 public 是加号 private 是减号 protected 是井号
第三层 方法,格式是 可见性 方法名 参数列表 返回值类型
类之间六种关系对照表
| 关系名称 | 含义 | 连线特征 |
|---|---|---|
| 继承泛化 | 子类继承父类,获得父类属性方法 | 空心三角箭头指向父类 实线 |
| 实现 | 类实现接口里面定义的方法 | 空心三角箭头指向接口 虚线 |
| 关联 | 两个类长期持有引用,比如学生和课程 | 实线,可以加多重度 |
| 聚合 | 整体和部分,部分可以独立于整体存在,比如班级和学生 | 空心菱形在整体端 实线 |
| 组合 | 整体和部分,部分不能脱离整体独立存在,比如订单和订单项 | 实心菱形在整体端 实线 |
| 依赖 | 临时使用,方法参数或者局部变量,是最弱关系 | 虚线箭头指向被依赖类 |
完整绘制步骤
第一步,业务分析,阅读需求文档,找出全部业务实体,比如用户 订单 商品,把这些实体确定成候选类
第二步,筛选精简类,去掉不需要的冗余类,合并职责重复的类,确定每个类的单一职责
第三步,填充属性,根据业务确定每个类需要保存的数据,比如用户类里面有 id 姓名 手机号
第四步,填充方法,确定类需要提供的业务操作,比如订单类里面有创建订单 取消订单方法
第五步,识别类之间关系,判断是继承 关联 聚合还是组合,标注多重度,比如一个用户可以对应多个订单,就是一对多
第六步,选择绘图工具,常用工具有 StarUML Visio PlantUML drawio,手绘练习可以直接画矩形和连线
第七步,校验检查,检查可见性标记 箭头方向 多重度是否符合 UML 规范,确认没有逻辑错误
第八步,评审优化,和团队评审类设计,降低耦合,调整不合理的类划分,定稿之后作为编码参考
常用绘图工具清单
第一,drawio,免费在线工具,上手简单,适合课设作业
第二,StarUML,专业 UML 软件,支持标准 UML 类图,支持导出多种格式
第三,PlantUML,代码生成类图,适合程序员,写文本代码自动渲染图形
第四,Visio,微软办公绘图软件,企业项目经常使用
深度绘制要点
多重度是很多新手容易漏掉的部分,写在连线两端,常见写法 1 表示一个,0.. 表示零个或者多个,1.. 表示至少一个,用来明确一对多 多对多数量关系。接口在类图里面可以使用棒棒糖表示法,比普通矩形更加简洁。抽象类不能实例化,类名斜体标记,抽象方法也要斜体。画 UML 类图不需要把所有代码字段全部塞进去,设计阶段只保留核心业务属性和核心业务方法,不需要写 get set 这类基础访问器,不然类图会过于繁杂失去设计意义。
问题 1,UML 类图怎么画的时候聚合和组合分不清怎么办
回答 1,UML 类图怎么画的核心区分点,聚合是部分可以独立存活,组合是部分随整体销毁,比如汽车和发动机属于组合,学校和老师属于聚合,绘制 UML 类图的时候组合使用实心菱形,聚合使用空心菱形。
问题 2,UML 类图怎么画可以用代码自动生成吗
回答 2,UML 类图怎么画支持代码自动生成,PlantUML 可以通过文本代码自动生成 UML 类图,也有部分 IDE 插件可以从现有 Java 代码反向生成 UML 类图,适合已经写完代码补画类图作业。
问题 3,UML 类图怎么画 继承和实现连线有什么区别
回答 3,UML 类图怎么画里面,继承泛化是实线加空心三角,子类指向父类,实现是虚线加空心三角,类指向接口,绘制 UML 类图的时候这两种连线不能混用。
本内容为 UML 类图绘制通用教学,UML 规范存在不同版本,部分企业项目会有自定义简化画法,本教程遵循标准 UML2 规范,仅用于学习作业参考,正式项目请按照团队统一规范执行。


