🧩 面向对象是怎样工作的(第3版) · 目录

🧩 面向对象是怎样工作的(第3版)

照着《面向对象是怎样工作的(第3版)》([日]平泽章 著,侯振龙 译,人民邮电出版社 · 图灵程序设计丛书,2022-09,282 页)做的自学笔记 —— 前三本讲的是机器怎么造、程序怎么跑、网络怎么连,都是硬邦邦的机制;这一本转过来问一件看不见的事:一堆代码凭什么能被组织成好改、好复用、好分工的样子?全书 12 章 134 节 + 附章《函数式语言是怎样工作的》15 节 + 三个专栏系列共 10 处,共 159 篇:先讲清面向对象到底解决了什么痛(为什么它难、为什么比喻会骗人、为什么一个词有三层意思),再从编程语言的历史一路捋到类/多态/继承三大要素,下潜到内存结构(栈与堆、指针、引用计数、垃圾回收、继承时的内存布局),讲重用(类库、框架、组件、设计模式),两种用法(编程技术与归纳整理法),然后进上游工程:UML 十三种图、建模、面向对象设计与职责分配,最后是敏捷开发与「时代追上了面向对象」。这本是思想课+机制课:不需要装 Java 或 UML 工具也能读完,各篇「动手 Demo」都是沙箱里真跑过的 Python 小脚本(模拟类与实例的内存布局、多态分发、引用计数、设计模式的最小骨架),书里的 Java/UML 图用【📋 实操路径】单列。教材成书于 2022 年,凡与现状不同处各篇用【⚠️ 2026 现状】单列。大白话、不跳步骤、必带生活比喻、常见误区、可折叠自测题。
前置课程:程序是怎样跑起来的(同一系列,讲程序怎么跑)、计算机是怎样跑起来的(硬件怎么搭)、编程原理(编程全貌)、Java 基础(面向对象在真语言里的写法)。本书与网络是怎样连接的同属图灵「是怎样」系列。

内容来自我的 Obsidian 自学笔记 · 全 12 章 134 节 + 附章 15 节 + 10 专栏 · 共 159 篇完结 ✅

第一章 面向对象:让软件开发变轻松的技术

第二章 似是而非:面向对象与现实世界

第三章 理解OOP:编程语言的历史

第四章 面向对象编程技术:去除冗余、进行整理

4.1

OOP具有结构化语言所没有的三种结构

类治参数重复、多态治分支重复、继承治代码…

⭐⭐阅读全文 →
4.2

OOP的结构会根据编程语言的不同而略有差异

多继承/接口/可见性/垃圾回收四大差异…

⭐⭐阅读全文 →
4.3

三大要素之一:具有三种功能的类

类是汇总+隐藏+创建很多个,顺序不能反…

⭐⭐阅读全文 →
4.4

类的功能之一:汇总

参数从 8 个降到 1 个,更关键是【忘…

⭐⭐阅读全文 →
4.5

类的功能之二:隐藏

一个下划线靠自觉、两个被改名;实测 _b…

⭐⭐阅读全文 →
4.6

类的功能之三:创建很多个

造 10000 个实例编号 0~9999…

⭐⭐阅读全文 →
4.7

实例变量是限定访问范围的全局变量

改类变量两个都变、给 u1 赋值只变 u…

⭐⭐阅读全文 →
4.8

三大要素之二:实现调用端公用化的多态

调用端只写一份:实测 total 一行算…

⭐⭐⭐阅读全文 →
4.9

三大要素之三:去除类的重复定义的继承

重复 5 行降 0 行、改动点 2 处降…

⭐⭐⭐阅读全文 →
4.10

对三大要素的总结

三要素各对一种重复:类→汇总隐藏、多态→…

⭐⭐阅读全文 →
4.11

通过嵌入类型使程序员的工作变轻松

动态语言类型嵌在运行时;注解存进 __a…

⭐⭐阅读全文 →
4.12

将类作为类型使用

isinstance 算子类、type…

⭐⭐阅读全文 →
4.13

编程语言【退化】了吗

退化=把活儿交给机器:同一加法汇编 3…

⭐⭐阅读全文 →
4.14

更先进的OOP结构

包、异常、垃圾回收其实都在管边界:命名边…

⭐⭐阅读全文 →
4.15

进化的OOP结构之一:包

实测已加载 111 个模块(顶层 96…

⭐⭐阅读全文 →
4.16

进化的OOP结构之二:异常

level1→2→3 抛异常,中间两层一…

⭐⭐⭐阅读全文 →
4.17

进化的OOP结构之三:垃圾回收

引用计数实测 2→3→2,减到 0 自动…

⭐⭐⭐阅读全文 →
4.18

对进化的 OOP结构的总结

三条边界三笔代价:包→目录变复杂、异常→…

⭐⭐阅读全文 →
4.19

决心决定OOP的生死

改动上下文实测 6 行 vs 5 行,形…

⭐⭐阅读全文 →
专栏

当今的OOP 从网页工具进化而来的PHP

PHP 从嵌在 HTML 里的脚本进化到…

⭐阅读全文 →

第五章 理解内存结构:程序员的基本素养

5.1

理解OOP程序的运行机制

一行 s.area() 走四步:找变量(…

⭐⭐阅读全文 →
5.2

两种运行方式:编译器与解释器

2000 次执行里翻译 1 次对 200…

⭐⭐阅读全文 →
5.3

解释、运行中间代码的虚拟机

一行 return w * h 被拆成…

⭐⭐阅读全文 →
5.4

CPU 同时运行多个线程

实测算数任务 4 线程 0.03 秒对…

⭐⭐⭐阅读全文 →
5.5

使用静态区、堆区和栈区进行管理

静态区放类信息与常量、堆放实例、栈放局部…

⭐⭐⭐阅读全文 →
5.6

OOP 的特征在于内存的用法

同一份数据全局版只有 2 个键 1 份…

⭐⭐⭐阅读全文 →
5.7

每个类只加载一个类信息

造 10000 个实例、类对象只有 1…

⭐⭐⭐阅读全文 →
5.8

每次创建实例都会使用堆区

五个实例的 id 与五本字段表 id 全…

⭐⭐阅读全文 →
5.9

在变量中存储实例的指针

y = x 后 id 相同、引用计数 3…

⭐⭐⭐阅读全文 →
5.10

复制存储实例的变量时要多加注意

浅复制改内层原件跟着变([1,2,3])…

⭐⭐⭐阅读全文 →
5.11

多态让不同的类看起来一样

一个列表装两个不同类实例,分别落到 Re…

⭐⭐⭐阅读全文 →
5.12

根据继承的信息类型的不同,内存配置也不同

普通类 48+296=344 字节/个…

⭐⭐⭐阅读全文 →
5.13

孤立的实例由垃圾回收处理

del 后弱引用立刻变 None(引用计…

⭐⭐⭐阅读全文 →
专栏

编程往事 OOP中dump看起来很费劲?

一行 repr 只给类名和地址,两层对象…

⭐阅读全文 →

第六章 重用:OOP带来的软件重用和思想重用

第七章 化为通用的归纳整理法的面向对象

第八章 UML:查看无形软件的工具

8.1

UML是表示软件功能和结构的图形的绘制方法

一句 18 字需求实测藏 3 处没写清(…

⭐⭐阅读全文 →
8.2

UML有13种图形

结构 6 种(类/对象/包/组件/部署/…

⭐⭐阅读全文 →
8.3

UML的使用方法大致分为三种

三种用法引用 10 次、去重只 7 种…

⭐⭐⭐阅读全文 →
8.4

UML的使用方法之一:表示程序结构和动作

实测 3 个类/4 个属性/4 个方法…

⭐⭐阅读全文 →
8.5

类图表示OOP程序的结构

反射实测三格:Account 2 属性…

⭐⭐⭐阅读全文 →
8.6

使用时序图和通信图表示动作

同一批消息两种排法:4 条消息落在 3…

⭐⭐⭐阅读全文 →
8.7

UML的使用方法之二:表示归纳整理法的成果

概念类图只列属性不列方法:两个阶段属性都…

⭐⭐阅读全文 →
8.8

使用类图表示根据集合论进行整理的结果

issubclass 矩阵 True 共…

⭐⭐⭐阅读全文 →
8.9

表示职责分配的时序图和通信图

5 个动作落到 3 个类、重叠 0 处…

⭐⭐⭐阅读全文 →
8.10

UML的使用方法之三:表示非面向对象的信息

7 条语句/6 处函数调用/0 个类的过…

⭐⭐阅读全文 →
8.11

使用用例图表示交给计算机的工作

2 个参与者/6 个用例/2 条包含+1…

⭐⭐阅读全文 →
8.12

使用活动图表示工作流程

7 个节点/8 条箭头/2 个判定点/3…

⭐⭐⭐阅读全文 →
8.13

使用状态机图表示状态的变化

6 个状态/7 条迁移/7 种事件,从新…

⭐⭐⭐阅读全文 →
8.14

弥补自然语言和计算机语言缺点的【语言】

五维打分 UML 拿 4 个,唯一做不到…

⭐⭐阅读全文 →

第九章 建模:填补现实世界和软件之间的沟壑

9.1

现实世界和软件之间存在沟壑

借书这件事 11 个现实事实里软件只记…

⭐⭐阅读全文 →
9.2

计算机擅长固定工作和记忆工作

同一函数跑 10000 次结果完全一致…

⭐⭐阅读全文 →
9.3

通过业务分析、需求定义和设计来填补沟壑

三道筛子:业务分析 8 条 → 需求定义…

⭐⭐⭐阅读全文 →
9.4

建模是顺利推进这三个阶段的工作的技术

12 个该谈清的信息点,口头讨论漏 5…

⭐⭐阅读全文 →
9.5

应用程序不同,建模的内容也不一样

业务系统看数据与流程(用例图/类图)、嵌…

⭐⭐阅读全文 →
9.6

业务应用程序记录现实中的事情

借阅表 6 个字段:4 个来自现实事件…

⭐⭐阅读全文 →
9.7

对图书馆的借阅业务进行建模

8 个名词只有 4 个成概念类(读者/书…

⭐⭐阅读全文 →
9.8

使用用例图来表示图书馆业务

3 个参与者 8 个用例:读者 4/馆员…

⭐⭐阅读全文 →
9.9

用概念模型表示图书馆系统的信息

4 个概念类、11 个属性、3 条关系…

⭐⭐⭐阅读全文 →
9.10

在业务应用程序中,数据结构反映现实世界

4 张表 17 个字段 3 个外键,与…

⭐⭐⭐阅读全文 →
9.11

嵌入式软件替代现实世界的工作

温控设备 100 次/秒即 6000 次…

⭐⭐阅读全文 →
9.12

嵌入式软件中设备的研究开发很重要

洗衣机控制器实现 12 行、验证 21…

⭐⭐阅读全文 →
9.13

使用状态机图表示全自动工作的情形

7 条迁移只有 1 条需要人按(按启动)…

⭐⭐⭐阅读全文 →
9.14

嵌入式软件一直执行单调的工作

主循环 10000 圈同一段代码、只有…

⭐⭐阅读全文 →
9.15

建模蕴含着软件开发的乐趣

4 个类 7 个属性 3 条关系,把能明…

⭐⭐阅读全文 →

第十章 面向对象设计:拟人化和职责分配

第十一章 衍生:敏捷开发

11.1

仅靠技术和技术窍门,软件开发并不会成功

10 个常见问题里技术只能解 5 个;需…

⭐⭐阅读全文 →
11.2

系统地汇总了作业步骤和成果的开发流程

流程=步骤+每步的产物:5 步 5 份产…

⭐⭐阅读全文 →
11.3

限制修改的瀑布式开发流程

瀑布式的唯一特征是产物冻结;在测试阶段提…

⭐⭐⭐阅读全文 →
11.4

瀑布式开发流程的极限

20 条需求开工时只能定清 12 条,剩…

⭐⭐⭐阅读全文 →
11.5

灵活响应变化的迭代式开发流程

每轮澄清 5 条、4 轮澄清完,第 1…

⭐⭐阅读全文 →
11.6

打破诸多限制的 XP

4 条价值观、12 项实践,列出 6 项…

⭐⭐阅读全文 →
11.7

确定团队工作推进方式的框架的Scrum

3 个角色+3 个产物+4 个会议=10…

⭐⭐阅读全文 →
11.8

快速编写优秀软件的敏捷宣言

四句【比起 A 更重视 B】,背后 12…

⭐⭐⭐阅读全文 →
11.9

支持敏捷开发的实践

8 项实践里技术侧 4 项、管理侧 4…

⭐⭐阅读全文 →
11.10

先编写测试代码,一边运行一边开发的测试驱动开发

红→绿→重构三步循环;3 条测试里有 2…

⭐⭐⭐阅读全文 →
11.11

在程序完成后改善运行代码的重构

1 个 10 行函数拆成 4 个、最长…

⭐⭐⭐阅读全文 →
11.12

经常进行系统整合的持续集成

120 条测试一次 0.2 秒、一天提交…

⭐⭐阅读全文 →
11.13

实践敏捷宣言理念的方法

4 条价值观各配 3 个可检查的动作,共…

⭐⭐阅读全文 →
11.14

敏捷开发源于面向对象

类小→能单独测、接口多态→换实现不动调用…

⭐⭐⭐阅读全文 →
11.15

不存在最好的开发流程

四流程按需求稳定/多变/小团队/大团队打…

⭐⭐⭐阅读全文 →
专栏

编程往事 过去不被允许的XP

当年不被允许的 5 个做法里 3 个已成…

⭐⭐阅读全文 →

第十二章 熟练掌握面向对象

附章 函数式语言是怎样工作的

A.1

面向对象编程语言和函数式语言混合占据主流的时代

同一件事四种写法:for 循环 3 条语…

⭐⭐阅读全文 →
A.2

函数式语言的7个特征

7 条拿到 Python 上验:完全具备…

⭐⭐阅读全文 →
A.3

特征1:使用函数编写程序

同一件事语句式 6 条语句 4 个中间变…

⭐⭐阅读全文 →
A.4

特征2:所有表达式都返回值

能当表达式 4 种(算术/三元/推导式/…

⭐⭐阅读全文 →
A.5

特征3:将函数作为值进行处理

赋值/装列表/当参数/当返回值四件事全成…

⭐⭐阅读全文 →
A.6

特征4:可以灵活组合函数和参数

partial 固定参数、pipe 串三…

⭐⭐阅读全文 →
A.7

特征5:没有副作用

纯函数调 100 次只有 1 种结果、带…

⭐⭐⭐阅读全文 →
A.8

特征6:使用模式匹配和递归来编写循环处理

模式匹配 4 个分支把判断与取值合成一步…

⭐⭐⭐阅读全文 →
A.9

特征7:编译器自动进行类型推断

同一个 sum 换输入类型自动跟变、代码…

⭐⭐阅读全文 →
A.10

对7个特征的总结

按 2/1/0 打分:满分 14、实得…

⭐⭐阅读全文 →
A.11

函数式语言的分类

按副作用分三类共 9 门语言:纯函数式只…

⭐⭐阅读全文 →
A.12

函数式语言的优势

三条硬指标:语句 3→1、10 个用例要…

⭐⭐阅读全文 →
A.13

函数式语言的课题

递归超 1000 层直接崩;朴素 fib…

⭐⭐阅读全文 →
A.14

函数式语言和面向对象的关系

同一需求:类版 1 个可变状态、函数版…

⭐⭐⭐阅读全文 →
A.15

掌握函数式编程

五个动作(推导式/不改入参/抽纯函数/用…

⭐⭐阅读全文 →
专栏

当今的OOP 打造了函数式语言的箱庭的Java

同一件事匿名类写法 12 行、lambd…

⭐⭐阅读全文 →