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

观点 2:类可复用,开发就快;封装隔离改动,改一处不牵全身,可维护性就高——拼装带来的两大红利。

📝 本节和前面几节的关系

上一节把零件拼了起来,本节点钞拼装赚到的两笔钱:开发效率与可维护性。

一、开发效率:复用

造一个【日期类】,全项目 30 处直接拿来用——写一次、用 N 次。 更大的复用是类库:Java 标准类库几千个类随取随用,别人造好的零件仓库,你在拼自己的机器。 5.4 学过的典型算法(排序、查找)如今都封在类库里——调一句 sort() 就是站在别人肩膀上。

二、可维护性:封装隔离

维护的痛不在改,而在牵连——改一行、崩十处。 类把改动关进围墙:内部实现升级(查找从线性换二分、存储从文件换数据库),只要方法签名不变,调用方一行不用改。 上一节的【接口稳定】在这里兑现:围墙内翻天覆地,围墙外岁月静好。

三、两笔钱的算术

开发效率省的是【第一次】的工夫,可维护性省的是【以后每一次】的工夫——软件生命周期里,维护的开销远大于初建。 所以工程界说:代码是写给别人读、留给以后改的——OOP 的封装正是为这句话提供的硬件设施。

四、动手 Demo:改内部不动外部

价格标注类从 V1 升级到 V2,内部格式全变,调用方一行不改。

class PriceV1:
    def label(self, n):
        return "价格:" + str(n)
class PriceV2:
    def label(self, n):
        return "价格:%04d 元" % n
def print_all(obj):
    for n in [5, 50, 500]:
        print(obj.label(n))
print_all(PriceV1())
print_all(PriceV2())

实跑输出:

--------------------------------------------------------------------
观点 2——提升开发效率和可维护性
--------------------------------------------------------------------

拼装带来两大红利: 组件可复用(开发快), 改动可隔离(好维护)。

演示【改内部不动外部】: 价格标注类 V1 升级成 V2, 调用方一行不改:

    [V1 时期]
    价格:5
    价格:50
    价格:500
    [V2 上线, 只换对象, 调用代码没动]
    价格:0005 元
    价格:0050 元
    价格:0500 元

  维护场景       过程式写法           面向对象写法
  ---------------------------------------------------
  改显示格式     满世界找打印语句     只改类内部一处
  新项目复用     复制粘贴再改一遍     拿类直接用

改动被关在类的围墙里, 围墙外的世界照常运转——
这就是【可维护性】的机制来源, 也是 7.4 要细讲的账。

print_all 一行没改,输出已换代——调用方只认 label() 这个接口,围墙内怎么改它不管。 【⚠️ 2026 现状】这个思路的现代名字叫【面向接口编程】:依赖抽象不依赖实现,是设计模式的总纲。

30 秒实验

  1. 找一个你改过多次的脚本,估算每次【找地方改】花了多少时间——想想封装能省下多少。
  2. 把一段重复三遍的格式化代码抽成一个函数再进一步抽成类,体会复用层级的差别。

常见误区

  1. 以为复用就是复制粘贴——粘贴出去的代码改一处要跟 N 处,是负复用。
  2. 以为可维护性靠多写注释——结构上的隔离(封装)比注释更能挡住牵连。
自测三问(点开对答案) 1. 观点 2 说 OOP 带来哪两大红利? —— 复用提升开发效率;封装隔离提升可维护性。 2. 封装为什么能提高可维护性? —— 把改动关在类内部,接口不变则调用方不受牵连。 3. 类库和 5.4 的典型算法什么关系? —— 类库把典型算法封装好了,调用即用——复用的极致。

相关笔记