📄 一句话概括
1967 年的 Simula 到 2004 年的 Rails,37 年,三次跃迁——类、模式与框架、敏捷;每一次都解决上一层管不了的问题。
📝 本节和前面几节的关系
1.1 说它是综合技术,这一节讲这个【综合】是怎么一年一年长出来的。
一、第一次跃迁:类被发明
1967 年 Simula 67 第一次把【类】和【对象】放进语言,动机很实在:模拟系统里的实体。 1972 年 Smalltalk 走得更远——连数字都是对象,一切交互都是发消息。 这一阶段的成果就一件事:代码终于有了【组织单位】,不再是一堆函数。
二、第二次跃迁:设计被总结
有了类,新的问题冒出来:类该怎么摆? 1983 年 C++ 定名,把 OOP 塞进系统级语言——能用,但没人告诉你该怎么用。 1994 年 设计模式成书,把前人反复用的摆法收成套路——从【写代码】升到【抄思路】。 2004 年 Rails 走红,把结构直接做进框架——连抄都不用抄了,填就行。
三、第三次跃迁:人怎么办
类摆对了,还是可能做不出东西——因为需求会变。 2001 年 敏捷宣言,把矛头从【技术】转向【怎么干活】:短迭代、持续交付、拥抱变化。 这一层解决的不是代码问题,是组织问题。
四、为什么这个顺序不可颠倒
没有类,谈设计模式是空谈——模式描述的就是类和对象怎么摆。 没有设计,谈敏捷会变成瞎忙——天天交付一堆没人维护得动的代码。 层级是有依赖的:下面不稳,上面就是空中楼阁。这也解释了 1.1 的三层为什么是叠起来的。
五、动手 Demo:从编程语言演化为综合技术
把关键节点摊在时间轴上,看它分几次跳。 算一算从第一门 OOP 语言到框架走红,一共多少年。
events = [
(1967, "Simula 67", "类与对象第一次进语言"),
(1972, "Smalltalk", "纯对象:连数字都是对象"),
(1983, "C++ 定名", "把 OOP 塞进系统级语言"),
(1994, "设计模式成书", "从写代码升到抄思路"),
(1995, "Java 发布", "虚拟机+标准类库"),
(2001, "敏捷宣言", "从技术升到怎么干活"),
(2004, "Rails 走红", "框架替你把结构定好"),
]
for y, name, note in sorted(events):
print(y, name, note)
print("跨度", 2004 - 1967, "年")
实跑输出:
--------------------------------------------------------------------
从编程语言演化为综合技术
--------------------------------------------------------------------
面向对象不是一天长成的。把它摊在时间轴上:
年份 事件 那一步多出来了什么
-----------------------------------------------------
1967 Simula 67 类与对象第一次进语言
1972 Smalltalk 纯对象:连数字都是对象
1983 C++ 定名 把 OOP 塞进系统级语言
1994 设计模式成书 从【写代码】升到【抄思路】
1995 Java 发布 虚拟机+标准类库,跨平台
2001 敏捷宣言 从【技术】升到【怎么干活】
2004 Rails 走红 框架替你把结构定好
从 Simula 到 Rails 走红,**37 年**。这 37 年里发生的事,可以归成三次跃迁:
第一次 【类】被发明——有了组织代码的单位
第二次 【模式与框架】被总结——有了组织设计的单位
第三次 【敏捷】被提出——有了组织人的单位
**每一次跃迁,解决的都是上一层管不了的问题。**
类管不了【这个类该负责什么】,于是有了设计;
设计管不了【需求天天变怎么办】,于是有了敏捷。
这就是本书说【面向对象是综合技术】的由来——**它是三层解决方案叠起来的名字。**
实测:37 年,三次跃迁。 时间轴上的顺序不能乱——没有类就没有模式,没有设计就没有敏捷。
30 秒实验
- 把你自己用的框架,归到【类/模式/敏捷】哪一层带来的收益最大。
- 想一想:如果明天所有语言都去掉了
class,你手上的项目还剩多少。
常见误区
- 以为面向对象是【某一年被发明出来的】。它是一层层长出来的。
- 以为三层可以挑着学。下面不稳,上面就是空话。
自测三问(点开对答案)
1. 三次跃迁分别是什么? —— 类被发明(Simula/Smalltalk)、设计被总结(模式与框架)、人怎么办(敏捷)。 2. 从 Simula 到 Rails 走红隔了多少年? —— 1967 到 2004,37 年。 3. 为什么这个顺序不可颠倒? —— 模式描述的是类和对象怎么摆,没有类就无从谈起;没有设计,敏捷只会变成天天交付没人维护的代码。- ☐ 下一节(1.4 面向对象难的原因)
相关笔记
- 面向对象是软件开发的综合技术 — 三层全景
- 本书的构成 — 这三层分别在哪几章
- 🔵 计算机基础 · 索引 — 计算机是怎么一步步长成的
- 🧩 面向对象是怎样工作的 · 索引