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

OOP 难以一言定义——业界从七个角度各自理解:组件拼装、效率可维护、大型开发、现实建模、UML 设计、消息驱动、三大特性;合起来才是完整地图。

📝 本节和前面几节的关系

上一节说了 OOP 是什么货,本节先给全章铺一张地图,之后 7.3~7.9 逐站细看。

一、为什么会有多种理解

OOP 不是数学定义,而是工程实践——不同出身的人从不同侧面拥抱它。 Smalltalk 一系强调【对象间传消息】(观点 6);C++ 一系强调【组件复用】(观点 1、2);企业开发强调【大型分工】(观点 3、5);学院派强调【建模】(观点 4)。 每一路都没说错,也都只说了一面——所以教材干脆摆出七个观点,让你自己合出全貌。

二、七个观点总览

观点 1:通过把组件拼装到一起构建程序——类是零件; 观点 2:能够提升程序的开发效率和可维护性——复用+隔离; 观点 3:是适用于大型程序的开发方法——类是分工单元; 观点 4:就是在为现实世界建模——程序结构跟着现实结构走; 观点 5:可以借助UML设计程序——先画图纸再施工; 观点 6:通过在对象间传递消息驱动程序——程序是一张消息网; 观点 7:使用继承、封装和多态——三大特性是技术核心。

三、怎么用这张地图

初学抓两头入门:观点 1(拼装的直觉)+观点 7(三大特性的机制); 工作后按需补齐:带团队看观点 3,画设计图看观点 5,写 GUI 看观点 6; 观点之间不打架——它们是同一头象的不同部位,而不是七种互相竞争的 OOP。

四、动手 Demo:七种理解一览地图

把七个观点排成一张表,一站一句抓住,之后每节展开一站。

# 七个观点的关键词
views = [
    ("观点1", "组件拼装"), ("观点2", "复用封装"),
    ("观点3", "大型分工"), ("观点4", "现实建模"),
    ("观点5", "UML图纸"), ("观点6", "消息驱动"),
    ("观点7", "三大特性"),
]
for no, kw in views:
    print(no, "->", kw)

实跑输出:

--------------------------------------------------------------------
对 OOP 的七种理解——一张地图
--------------------------------------------------------------------

OOP 难以下一个定义, 业界从七个角度各自理解。先把地图铺开:

  观点      一句话抓住                   关键词
  -------------------------------------------------
  观点1     把组件拼装到一起构建程序     组件/拼装
  观点2     提升开发效率和可维护性       复用/封装
  观点3     适用于大型程序的开发方法     分工/协作
  观点4     在为现实世界建模             建模/抽象
  观点5     借助 UML 设计程序            类图/图纸
  观点6     在对象间传递消息驱动程序     消息/派发
  观点7     使用继承、封装和多态         三大特性

地图之后还有两站收尾: 类和对象的区别、类的三种使用方法。
七个观点像盲人摸象——每个只摸到一面, 合起来才是全貌。
接下来 7.3 起逐站细看。

地图之外还有两站收尾(7.10 类和对象、7.11 三种用法)——先地图后景点,是本章的游览顺序。 面试或读书遇到【OOP 是什么】,用这张地图回答比背一个定义更完整。

30 秒实验

  1. 合上笔记,凭记忆说出七个观点各一词的关键词。
  2. 挑你最熟悉的一个软件(如微信),猜猜它最常用哪几个观点。

常见误区

  1. 以为七个观点互相竞争、只能信一个——它们是七面镜子,照的是同一头象。
  2. 以为 OOP 有官方唯一定义——它是工程实践,业界至今并存多种理解。
自测三问(点开对答案) 1. 七个观点分别从哪些侧面理解 OOP? —— 拼装、效率可维护、大型开发、建模、UML、消息驱动、三大特性。 2. 初学建议先抓哪两个观点? —— 观点 1(拼装直觉)和观点 7(三大特性机制)。 3. 为什么 OOP 有多种理解? —— 它是工程实践不是数学定义,不同出身的人强调不同侧面。

相关笔记