📄 一句话概括
建模第一步永远是把话摊成名词和动作——实测 8 个名词只有 4 个成概念类,6 个动作另归用例图。
📝 本节和前面几节的关系
9.6 讲了业务系统的本质,这一节拿图书馆借阅业务从头走一遍,这是本章的主案例。
一、第一步:摊名词
把业务描述里所有名词抄下来:读者、书、借阅记录、罚款、书架、馆员、图书馆、借书证——8 个。 逐个判断:它是【要处理的信息】吗? 结果:4 个成概念类(读者、书、借阅记录、罚款)。
二、丢掉的四种理由
书架:物理位置,软件不管。 馆员:在软件里只是一组权限。 图书馆:软件本身就是它。 借书证:它不是独立的类,是读者身上的一个属性。
三、第二步:分动作
动作 6 个:借书、还书、续借、算逾期、算罚款、催缴。 名词进概念模型,动作进用例图——两者不能混在一张图上。 每个动作都必须有归属(9.8 的用例图会逐个分配)。
四、这一步做错的代价
类分错了,后面全错:用例图要重画,表结构要重设计。 典型的错法是把【借书证】也做成一个类,结果多一张表、多一个外键、多一堆冗余字段。 所以这一步宁可慢:摊名词只要几分钟,改表结构要几天。
五、动手 Demo:对图书馆的借阅业务进行建模
把业务描述里的名词逐个判定:成概念类、丢掉、还是并入属性。 再把动作单列出来。
nouns = {"读者": "概念类", "书": "概念类", "借阅记录": "概念类",
"罚款": "概念类", "书架": "丢掉", "馆员": "丢掉(只作权限)",
"图书馆": "丢掉(软件本身)", "借书证": "并入读者属性"}
verbs = ["借书", "还书", "续借", "算逾期", "算罚款", "催缴"]
kept = [k for k, v in nouns.items() if v == "概念类"]
print(len(nouns), len(kept), len(verbs)) # 8 4 6
实跑输出:
--------------------------------------------------------------------
对图书馆的借阅业务进行建模
--------------------------------------------------------------------
建模第一步永远是**把话摊成名词和动作**。实测:
名词 怎么处理
------------------------------
读者 概念类
书 概念类
借阅记录 概念类
罚款 概念类
书架 丢掉
馆员 丢掉(只作权限)
图书馆 丢掉(软件本身)
借书证 并入读者属性
名词 8 个
成为概念类 4 个(读者/书/借阅记录/罚款)
动作 6 个
每个动作都要有归属 见 9.8 的用例图
**名词和动作是两种东西**:名词进概念模型,**动作进用例图。**
**【借书证】这种要小心**——它不是独立的类,是读者身上的一个属性。
**这一步做错,后面全错**:类分错了,用例图和表结构都得重画。
实测:8 个名词,4 个成概念类(读者/书/借阅记录/罚款),6 个动作另算。 【借书证】是最容易做错的一个——它是读者身上的属性,不是独立的类。 名词进概念模型、动作进用例图,混在一起画就乱了。
30 秒实验
- 拿一段你自己的业务描述,把名词全部抄下来逐个判定。
- 检查有没有把【某个属性】误当成一个类。
常见误区
- 以为名词越多模型越全。能丢的要丢,留下的才值钱。
- 把【借书证】做成独立的类。多一张表、多一个外键、多一堆冗余。
自测三问(点开对答案)
1. 建模第一步做什么? —— 把业务描述摊成名词和动作两类。 2. 实测 8 个名词留下几个? —— 4 个成概念类:读者、书、借阅记录、罚款。 3. 借书证为什么不是类? —— 它是读者身上的一个属性,独立成类会多出表、外键与冗余字段。- ☐ 9.8 使用用例图来表示图书馆业务
相关笔记
- 业务应用程序记录现实中的事情 — 记录的是哪些事实
- 使用用例图表示交给计算机的工作 — 用例图的画法
- 用概念模型表示图书馆系统的信息 — 名词的下一步
- 🧩 面向对象是怎样工作的 · 索引