🧩 第七章 化为通用的归纳整理法的面向对象
📄 一句话概括

把现实名词摊开数一遍:7 个词只有 3 个成了类,实测落成率 43%——软件表示的是【要处理的信息】,不是现实本身。

📝 本节和前面几节的关系

这本书里有两节同名(2.8 和 7.1),但角度不同:2.8 讲【像不像】,这一节讲【落成多少】。同时这是第七章的开篇,话题从【怎么写代码】转到【怎么整理信息】。

一、先说清这节和 2.8 的关系

2.8 的结论是【软件并不会直接表示现实世界】,讲的是为什么不像:现实有无穷细节,软件只需要其中一小部分。 这一节从同一个结论出发,换了个问法:现实里的那些名字,有多少能落成类? 2.8 讲【不对齐】,7.1 讲【怎么筛】。筛的标准只有一条——要不要处理它。

二、实测:七个名词,三个成类

拿图书馆借书这个最小业务,把现实名词摊开:读者、书、借阅记录、书架、管理员、罚款、图书馆。 成类的三个:读者 → Reader、书 → Book、借阅记录 → Loan。 没成类的四个:书架、管理员、图书馆、罚款。 落成率 43%——不到一半。这个比例不是巧合,大部分业务都落在这个量级。

三、消失的四种原因各不相同

书架:物理位置,软件不关心书放在哪一层。 管理员:在软件里只是一组权限,而权限不是一个对象。 图书馆:软件本身就是它——容器不需要再成为一个类。 罚款:现实里是一整套流程(定价、通知、缴纳、催缴),软件里只留下【金额】这一个字段,挂在 Loan 上。 四种消失理由不同,共同点是:它们都不是【要处理的信息】。

四、这条筛选法的实际操作

问三个问题:它有状态要记吗?它有动作要算吗?它要跟别的名词区分开吗? 三个都答【是】→ 成类;只答前两个 → 多半只是一个字段。 注意这个筛选是业务决定的,不是技术决定的:换个业务,同样七个名词可能落成五个类。 第七章要干的事,就是把这套筛选法从代码里抽出来——抽出之后它就不只属于程序了。

五、动手 Demo:软件不会直接表示现实世界

把一个最小业务的七个现实名词摊开,看几个成了类。 顺便验证一下这本书里两处同名的节到底差在哪。

nouns = ["读者", "书", "借阅记录", "书架", "管理员", "罚款", "图书馆"]
kinds = {
    "读者":     "成了类 Reader",
    "书":       "成了类 Book",
    "借阅记录": "成了类 Loan",
    "书架":     "没成类(物理位置,软件不管)",
    "管理员":   "没成类(软件里只是权限)",
    "罚款":     "没成类(变成 Loan 的一个字段)",
    "图书馆":   "没成类(软件本身就是它)",
}

as_class = sum(1 for v in kinds.values() if "成了类" in v)
print("落成率", 100.0 * as_class / len(nouns))   # 43%

实跑输出:

--------------------------------------------------------------------
软件不会直接表示现实世界
--------------------------------------------------------------------

  拿一个最简单的业务——图书馆借书——把现实名词摊开,看几个成了类:

  现实里的名词     在软件里变成了什么
  ------------------------------------------------
  读者             成了类 Reader
  书               成了类 Book
  借阅记录         成了类 Loan
  书架             没成类(物理位置,软件不管)
  管理员           没成类(软件里只是权限)
  罚款             没成类(变成 Loan 的一个字段)
  图书馆           没成类(软件本身就是它)

      现实名词                    7 个
      变成类的                    3 个
      没变成类的                  4 个
      落成率                      43%

  **注意这本书里有两节同名**(2.8 和 7.1),**但角度不同**:2.8 讲【像不像】,这一节讲【落成率】。
  **书架、管理员、图书馆在软件里【消失】了——不是漏了,是不需要。**
  **而【罚款】现实里是一整套流程,软件里只是一个字段。**
  **这就是 2.8 说的【不对齐】:软件表示的是【要处理的信息】,不是现实本身。**

实测:七个现实名词,三个成类,落成率 43%。 罚款那一行最值得看——现实里的一整套流程,进软件后压缩成了一个字段。 这正是 2.8 说的【不对齐】:软件表示的是【要处理的信息】,不是现实本身。

30 秒实验

  1. 拿你手上的一个业务,列出 10 个现实名词,看看几个能成类。
  2. 把没能成类的那些,各写一句【软件为什么不需要它】。

常见误区

  1. 以为现实里的东西都该有对应的类。落成率不到一半才是常态。
  2. 以为没成类的就是漏了。罚款从流程变成字段是精简,不是遗漏。
自测三问(点开对答案) 1. 7.1 和 2.8 有什么区别? —— 同一句结论、不同角度:2.8 讲【像不像】(为什么不对齐),7.1 讲【落成多少】(筛的标准)。 2. 实测落成率是多少? —— 七个现实名词三个成类,落成率 43%。 3. 罚款为什么没成类? —— 现实里是一套流程,软件里只需要金额这一个字段,挂在 Loan 上。 4. 书架和图书馆没成类,为什么理由不同? —— 书架是物理位置,软件根本不关心;图书馆是容器,软件本身就是它——容器不必再成为一个类。

相关笔记