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

自然语言能读但有歧义,程序能跑但难读——实测五个维度里 UML 拿下 4 个,它补的正是两头之间的空档。

📝 本节和前面几节的关系

8.1~8.13 把图都过了一遍,这一节回答为什么这些图能被叫作【语言】。

一、两头的缺口

自然语言:人能直接读懂,但同一句能读出好几种意思(8.1 那 3 处模糊)。 编程语言:意思唯一、机器能执行,但谈设计时它太早——代码一写就把方案锁死了。 中间缺一段:要能被讨论、又不能有歧义、还不能要求可执行。UML 站在这段里。

二、实测:五维打分 UML 拿 4 个

人能直接读懂:三种都行(编程语言要训练)。 机器能执行:只有编程语言。 不写清就画不出:UML 和编程语言都能,自然语言不能。 有统一的记号:UML 和编程语言都有,自然语言没有。 能表示还没写代码的设计:自然语言和 UML 能,编程语言不能。 UML 在五个维度里表现好的有 4 个,唯一做不到的是【机器能执行】——而它本来就不需要。

三、它凭什么算语言

有词汇:参与者、用例、类、状态——每个词有确定含义。 有语法:箭头怎么连、三角指向谁,画错了就是不合法。 有对错:一张把继承画成关联的类图,不是审美问题,是错的。 这三条齐了就叫语言,跟它能不能被机器执行无关。

四、这就是全章的收口

第七章说那套整理方法【通用】,第八章给它配了一套【通用的记号】。 方法管想清楚,语言管记下来——两者合起来,才让别人能读懂你想的。 记住一句话:图不是交付物,图是让别人能反驳你的东西。

五、动手 Demo:弥补自然语言和计算机语言缺点的【语言】

把自然语言、UML、编程语言放在五个维度上打分。 看 UML 在哪几维能站住、唯一站不住的是哪一维。

rows = [
    ("人能直接读懂", "能", "能", "要训练"),
    ("机器能执行", "不能", "不能", "能"),
    ("不写清就画不出", "不会", "会", "会"),
    ("有统一的记号", "没有", "有", "有"),
    ("能表示还没写代码的设计", "能", "能", "不能"),
]
ok = sum(1 for a, b, c, d in rows if c in ("能", "会", "有"))
print(ok)   # 4

实跑输出:

--------------------------------------------------------------------
弥补自然语言和计算机语言缺点的【语言】
--------------------------------------------------------------------

  自然语言好读但有歧义,编程语言精确但难读。**UML 站在中间。**实测三维打分:

  维度                       自然语言     UML      编程语言
  ----------------------------------------------------------
  人能直接读懂               能           能       要训练
  机器能执行                 不能         不能     能
  不写清就画不出             不会         会       会
  有统一的记号               没有         有       有
  能表示还没写代码的设计     能           能       不能

      五个维度里 UML 表现好的      4 个
      只有编程语言能做到的          1 个(机器能执行)
      只有 UML 能做到的            1 个(有记号又不写清不行,且能表示没写的代码)

  **UML 补的是两头之间的空档**:比自然语言严(不写清就画不出),比程序松(不用能执行)。
  **所以它天生适合【谈设计】**——那段东西还没法跑,但已经能指着讨论。
  **这也是 8.14 说的【语言】二字的重量**:它有语法、有词汇、有对错,**不是随手画的框图。**

实测:五个维度里 UML 表现好的有 4 个,唯一做不到的是【机器能执行】。 而它本来就不需要能执行——它要的是【能被指着讨论】。 有词汇、有语法、有对错,就是语言;这三个条件它都满足。

30 秒实验

  1. 拿一张你画的图,指出它里面【画错就是错】的地方(不是审美问题的那种)。
  2. 试着把一句歧义需求改写成 UML 语法,看还剩下几处说不清。

常见误区

  1. 以为不能执行的就不算语言。语言的标准是有词汇、有语法、有对错。
  2. 以为图是最终交付物。图是让别人能反驳你的东西。
自测三问(点开对答案) 1. UML 补的是什么空档? —— 比自然语言严(不写清就画不出)、比程序松(不要求可执行),正好用来谈设计。 2. 实测五维打分结果如何? —— UML 在五个维度里拿下 4 个,唯一做不到的是机器能执行。 3. 凭什么说它是语言? —— 有词汇(参与者/用例/类/状态)、有语法(线怎么连)、有对错(画错就是错)。

相关笔记