📄 一句话概括
观点 4:OOP 在为现实世界建模——狗建 Dog 类、订单建 Order 类,程序结构跟着现实结构走,人脑好理解、沟通好对齐。
📝 本节和前面几节的关系
前两个观点算【工程账】,这个观点算【认知账】:程序怎么长得像世界。
一、建模是什么
把现实事物抽象成类:属性对应事物的特征,方法对应事物的行为; 把现实关系变成类关系:继承对应【是一种】,组合对应【有一个】; 于是程序世界里住着一群【微缩现实】——读代码像读现实清单。
二、贴近人类思路的好处
1.6 说过计算机一直在为了贴近人类而进化:机器语言到高级语言是一跳,过程式到面向对象又是一跳。 贴得近,读得懂:新人接手项目,先认出【这是订单、这是用户】,再读逻辑——理解成本大降。 贴得近,好对齐:需求方说【商品、购物车、优惠券】,程序员照着建类——两拨人说同一种语言。
三、抽象的度
建模不是照抄现实:游戏里的狗不需要心跳属性,财务系统里的员工不需要爱好字段。 抓【当前问题相关】的属性和行为,其余舍去——抽象=有目的的简化。 同一个事物在不同系统里建成不同的类,不是谁建错了,而是目的不同。
四、动手 Demo:为现实世界建模
把狗和猫建成类,看程序世界如何微缩现实;再体会抽象该抓什么。
class Dog:
def __init__(self, name):
self.name = name
def speak(self): return "汪汪"
class Cat:
def __init__(self, name):
self.name = name
def speak(self): return "喵喵"
for pet in [Dog("旺财"), Cat("咪咪")]:
print(pet.name, pet.speak())
实跑输出:
--------------------------------------------------------------------
观点 4——面向对象编程就是在为现实世界建模
--------------------------------------------------------------------
现实世界有狗有猫, 程序里就造 Dog 类、Cat 类——
程序结构跟着现实结构走, 读代码像读现实清单:
旺财(Dog): 汪汪
咪咪(Cat): 喵喵
现实事物 程序模型 属性 行为
--------------------------------------------------
狗 Dog 类 名字 叫/吃/睡
猫 Cat 类 名字 叫/抓老鼠
订单 Order 类 金额/买家 支付/退货
注意: 建模不是照抄现实——游戏里的狗不需要心跳属性。
抓【当前问题相关】的属性, 其余舍去: 抽象 = 有目的的简化。
旺财和咪咪在程序里各是一个对象——现实事物、类、对象三层映射一次看清。 游戏里的狗类不会有心跳属性——建模抓【问题相关】的属性,抽象是有目的的简化。
30 秒实验
- 给【图书馆的书】建模:借阅系统需要哪些属性?排版系统又需要哪些?对比两个模型。
- 把你今天办的一件事(如点外卖)翻译成三四个类和一次方法调用。
常见误区
- 以为建模要把现实原样搬进程序——抽象要按目的取舍,全盘照抄只会臃肿。
- 以为类名只是代号随便起——类名是沟通语言,贴现实的命名本身就是文档。
自测三问(点开对答案)
1. 观点 4 说 OOP 在做什么? —— 为现实世界建模——程序结构跟着现实结构走。 2. 建模为什么不能照抄现实? —— 抽象=有目的的简化,只抓当前问题相关的属性。 3. 贴近现实对团队协作的好处? —— 需求方与程序员说同一种语言,对齐成本低。- ☐ 下一节(7.7 观点5:面向对象编程可以借助UML设计程序)
相关笔记
- LX_CH1_16 — 从机器语言到 OOP,一路都是贴近人类的进化
- LX_CH3_32 — 对照的另一端:机器只认 0 和 1
- 💻 计算机是怎样跑起来的 · 索引