💻 第七章 成为会使用面向对象编程的程序员吧
📄 一句话概括

观点 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. 给【图书馆的书】建模:借阅系统需要哪些属性?排版系统又需要哪些?对比两个模型。
  2. 把你今天办的一件事(如点外卖)翻译成三四个类和一次方法调用。

常见误区

  1. 以为建模要把现实原样搬进程序——抽象要按目的取舍,全盘照抄只会臃肿。
  2. 以为类名只是代号随便起——类名是沟通语言,贴现实的命名本身就是文档。
自测三问(点开对答案) 1. 观点 4 说 OOP 在做什么? —— 为现实世界建模——程序结构跟着现实结构走。 2. 建模为什么不能照抄现实? —— 抽象=有目的的简化,只抓当前问题相关的属性。 3. 贴近现实对团队协作的好处? —— 需求方与程序员说同一种语言,对齐成本低。

相关笔记