📄 一句话概括
建模最爽的地方:看不见的东西突然能指着讨论——实测一张纸上的 4 个类 3 条线,把能明确回答的问题从 2 个提到 6 个。
📝 本节和前面几节的关系
9.1~9.14 走完了建模的全流程,这一节收口:为什么这件事值得做。
一、乐趣在【变得能讨论】
没模型的时候,讨论只能靠回忆:你说的和我说的,可能根本不是一件事。 有模型之后,可以指着那个格子说【这里缺一条关系】。 这就是建模真正的产出——不是图,是一个能被共同指认的对象。
二、实测:能回答的问题从 2 个到 6 个
没有模型时,能明确回答的问题 2 个(还都只能靠回忆)。 有模型后 6 个:一个读者最多能借几本、一本书被谁借过、超期该罚多少、罚款交没交、同一本书能同时借给两人吗、记录留多久。 这 6 个问题里,前 4 个答案就在那 4 个格子里。
三、乐趣在【能被反驳】
这是软件开发里最像【设计】的时刻:还没写一行代码,方案已经能被别人挑错。 能被反驳,才有机会变好——没有人反驳的方案,通常是因为没人看懂。 所以模型的价值在评审桌上,不在硬盘里。
四、这一章的一句话总结
沟壑是真的(9.1 的 45%),填沟要分三段(9.3),建模是填的工具(9.4)。 业务系统靠记录(9.6~9.10),嵌入式靠替代(9.11~9.14),两类软件两套重点。 而乐趣全在【把看不见的东西摊到纸上】那一下——那一刻它才开始存在。
五、动手 Demo:建模蕴含着软件开发的乐趣
用最小的一组概念类与关系,对比【没有模型】与【有模型】能回答的问题数。 数一数模型里有几个类、几条关系。
model = {"读者": ["姓名", "证号"], "书": ["书名", "ISBN"],
"借阅记录": ["借出日", "应还日"], "罚款": ["金额"]}
rels = [("读者", "借阅记录"), ("书", "借阅记录"), ("借阅记录", "罚款")]
q_model = ["一个读者最多能借几本", "一本书被谁借过", "超期该罚多少",
"罚款交没交", "同一本书能同时借给两人吗", "记录留多久"]
print(len(model), sum(len(v) for v in model.values()), len(rels), len(q_model))
# 4 7 3 6
实跑输出:
--------------------------------------------------------------------
建模蕴含着软件开发的乐趣
--------------------------------------------------------------------
建模最爽的地方是:**看不见的东西突然变得能指着讨论。**实测对比:
没有模型 有模型
-----------------------------------------
能明确回答的问题 2 6
能指着讨论的对象 说不清 4 个类
能数清的关系 说不清 3 条
概念类 4 个
属性 7 个
关系 3 条
能明确回答的问题 6 个(原来只有 2 个)
**乐趣在哪**:一张纸上的 4 个格子 3 条线,**让一群人说的是同一件事。**
**这是软件开发里最像【设计】的时刻**——还没写一行代码,方案已经能被人反驳。
**而能被反驳,才有机会变好。**
实测:4 个概念类、7 个属性、3 条关系,能明确回答的问题 6 个(原来只有 2 个)。 乐趣在于这 4 个格子 3 条线让一群人说的是同一件事。 能被反驳,才有机会变好——模型的价值在评审桌上。
30 秒实验
- 拿一张你画的模型给同事看,数他能在几分钟内提出几个问题。
- 把今天学到的三步(摊名词、分动作、画关系)用在自己的项目上。
常见误区
- 以为建模的产出是图。产出是能被共同指认的对象。
- 以为没人反驳说明方案好。通常是没人看懂。
自测三问(点开对答案)
1. 建模真正的产出是什么? —— 不是图,是一个能被共同指认、可被反驳的对象。 2. 实测问题数变化? —— 从没有模型时的 2 个(还只能靠回忆)提升到 6 个。 3. 这一章一句话总结? —— 沟壑真实存在,填沟要分三段,建模是填的工具;业务靠记录、嵌入式靠替代。- ☐ 下一章(第十章 面向对象设计:拟人化和职责分配)
相关笔记
- 现实世界和软件之间存在沟壑 — 全章起点
- 建模是顺利推进这三个阶段的工作的技术 — 建模的收益
- 在业务应用程序中,数据结构反映现实世界 — 模型的落地
- 🧩 面向对象是怎样工作的 · 索引