🧩 第八章 UML:查看无形软件的工具
📄 一句话概括

UML 是用图形表示软件功能和结构的【语言】——实测一句 18 字的需求里藏着 3 处没写清,它的第一价值是逼你把这几处填上。

📝 本节和前面几节的关系

第七章讲完【整理方法】,这一章讲怎么把整理结果记下来。方法在心里,图在纸上——这一章就是那张纸。

一、UML 是一门语言,不是一种方法

全称 Unified Modeling Language,统一建模语言,注意是 Language 不是 Method。 它规定的是词汇和语法:一共几种图形、每种能画什么、线怎么连、哪种线表示继承。 它不管你怎么做设计——那是方法的事。7.2 的集合论与职责分配属于方法,UML 只负责把结果记下来。

二、实测:一句话里的三处模糊

拿一句真实需求:借书时如果书没还或者超期,系统就拒绝——18 个字。 【没还】:读者没还,还是书没被登记为已还? 【或者】:二选一,还是两条都算(既没还又超期)? 【系统】:哪个模块来做这个判断? 三处模糊,就是三个必须填的槽位。

三、为什么图形比文字严

文字允许省略:写【系统】不算写错,只是没写清,而没人会因此报错。 图形不允许省略:类图的格子空着就是空着,时序图的箭头不画,别人就真的不知道谁调用谁。 所以 UML 的第一价值是【检查清单】,第二才是【沟通工具】。 这也是它的代价:画图比写字慢,所以只在【必须说清】的地方画。

四、这一章的路线

8.2~8.3 先认全 13 种图形和三种用法。 8.4~8.6 用法一:表示程序的结构和动作(类图/时序图/通信图)。 8.7~8.9 用法二:表示归纳整理法的成果(同一批图,换个阶段画)。 8.10~8.13 用法三:表示非面向对象的信息(用例图/活动图/状态机图)。 8.14 收口:它凭什么算一门【语言】。

五、动手 Demo:UML是表示软件功能和结构的图形的绘制方法

拿一句真实需求,逐处标出【没说清】的地方。 这些点就是 UML 图里必须填的槽位。

sent = "借书时如果书没还或者超期,系统就拒绝"
marks = [
    ("没还", "指读者没还,还是书没被登记"),
    ("或者", "二选一,还是两条都算"),
    ("系统", "哪个模块来做这个判断"),
]
print(len(sent), len(marks), len(marks))   # 18 3 3

实跑输出:

--------------------------------------------------------------------
UML是表示软件功能和结构的图形的绘制方法
--------------------------------------------------------------------

  一句真实需求里藏着几处【没写清】?实测逐处标出来:

  原词     没说清的地方
  ------------------------------------
  没还     指读者没还,还是书没被登记
  或者     二选一,还是两条都算
  系统     哪个模块来做这个判断

      这句话字数                  18 字
      模糊点                      3 处
      UML 要补的槽位              3 个(谁—做什么—对谁)

  **文字不是不好,是它允许【没说清】。**
  **UML 的办法是:把这 3 个点变成图上必须填的槽位**——不填就画不出来。
  **所以它首先是【检查清单】,其次才是【图】。**

实测:18 个字里有 3 处模糊,对应 3 个 UML 必须填的槽位。 文字能含糊过去,图含糊不过去——这就是它作为【检查清单】的价值。 但代价是真的慢,所以只在关键处画,不必事事都画。

30 秒实验

  1. 翻出你最近写的需求或注释,找出 3 处【说了等于没说】的地方。
  2. 把这三处改写成 UML 图上的槽位(谁—做什么—对谁)。

常见误区

  1. 以为 UML 是一种开发方法。它是语言,方法另说(第 10 章)。
  2. 以为画图只是给领导看的。它是逼自己想清楚的工具,第一个受益者是自己。
自测三问(点开对答案) 1. UML 全称里的 L 指什么? —— Language(语言)。它规定词汇与语法,不规定你怎么做设计。 2. 实测那句话里有几处模糊? —— 18 个字里有 3 处:没还、或者、系统——各对应一个要填的槽位。 3. 为什么说图形比文字严? —— 文字允许省略而不算错,图形空格与缺线一眼可见,含糊不过去。

相关笔记