软件设计师 · UML类图 · 画图题

软考 UML 类图怎么画?

UML 类图题,不是画得像就能拿分。老师通常先看你有没有读出系统的静态结构:哪些是类,类之间是什么关系,关系两端的多重度是多少。类图画的是结构,不是业务流程;一旦把流程图思维带进类图,就容易乱。

软件设计师专题 软考题库编辑部 持续更新

先找类:类通常来自稳定的业务对象

类一般来自系统里比较稳定、需要记录状态和行为的对象,比如用户、订单、商品、课程、账户、审批单。属性是这个对象的数据,操作是这个对象能做或被要求完成的行为。不要把每一个动词都画成类,也不要把每一个字段都提升成类。

如果题目给的是文字描述,可以先用铅笔把名词圈出来,再筛一遍:哪些名词有自己的属性,哪些只是另一个类的字段,哪些是业务动作。这个过程比直接画线更重要。

材料元素类图里常见位置例子
业务对象订单、商品、客户
描述信息属性订单日期、商品价格
业务能力操作计算金额、提交订单
对象之间的结构关系关联/聚合/组合/泛化订单包含订单明细

关系线不要乱画:先分普通关联、整体部分和继承

普通关联表示两个类之间有结构性联系,比如学生选课程、客户拥有订单。聚合和组合都表示整体部分,但组合更强,部分通常不能脱离整体独立存在;聚合弱一些,部分可以独立存在。泛化看继承,比如会员用户是用户的一种。

实现关系通常和接口有关。题干如果说某个类实现某个接口,或者多个类遵循同一接口规范,就要考虑实现关系。考试里不一定要求你画得很复杂,但关系类型不能瞎猜。

关系题干信号易错提醒
关联两个类互相知道或协作不要所有关系都画成聚合
聚合弱整体部分部分可以独立存在
组合强整体部分生命周期通常绑定
泛化是一种看继承,不是拥有
实现实现接口常见于接口和具体类

多重度要读题,不要凭感觉写 1..*

多重度是类图题里的高频失分点。一个客户可以有多个订单,一个订单只属于一个客户,那么客户到订单这一端就是一对多。一个班级有多个学生,一个学生只属于一个班级,也是类似逻辑。题目里如果出现“至少一个”“可选”“最多一个”,就要对应 1..*、0..1、1 等符号。

很多同学会把多重度写反。一个简单方法是站在某个对象的角度问:对一个 A 来说,可以关联几个 B?对一个 B 来说,可以关联几个 A?两边分别问,答案就清楚了。

小例子:订单和订单明细

一个订单通常包含多个订单明细。

一条订单明细通常只属于一个订单。

如果题干强调订单删除后明细也无意义,这更接近组合关系。

UML 大题的答题顺序

比较稳的顺序是:先判断题目要的是类图、用例图、时序图还是活动图;再找类和关系;最后补属性、操作和多重度。不要一看到 UML 就往类图上靠,软考会故意用流程、参与者、消息顺序来干扰你。

类图的核心是静态结构。用例图看参与者和功能,时序图看对象之间按时间顺序发消息,活动图看流程和分支。把图的用途先分开,后面就不会把类图画成流程图。