📄 一句话概括
自然语言能读但有歧义,程序能跑但难读——实测五个维度里 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 秒实验
- 拿一张你画的图,指出它里面【画错就是错】的地方(不是审美问题的那种)。
- 试着把一句歧义需求改写成 UML 语法,看还剩下几处说不清。
常见误区
- 以为不能执行的就不算语言。语言的标准是有词汇、有语法、有对错。
- 以为图是最终交付物。图是让别人能反驳你的东西。
自测三问(点开对答案)
1. UML 补的是什么空档? —— 比自然语言严(不写清就画不出)、比程序松(不要求可执行),正好用来谈设计。 2. 实测五维打分结果如何? —— UML 在五个维度里拿下 4 个,唯一做不到的是机器能执行。 3. 凭什么说它是语言? —— 有词汇(参与者/用例/类/状态)、有语法(线怎么连)、有对错(画错就是错)。- ☐ 下一章(第九章 建模:填补现实世界和软件之间的沟壑)
相关笔记
- UML是表示软件功能和结构的图形的绘制方法 — 开头那 3 处模糊
- 在上游工程中化为通用的归纳整理法 — 方法那一半
- UML的使用方法大致分为三种 — 全章地图
- 🧩 面向对象是怎样工作的 · 索引