📄 一句话概括
观点 1:程序=组件的拼装。类就是零件,先造小零件类、再拼成大程序——与第二章拼装微型计算机是同一个思路。
📝 本节和前面几节的关系
地图铺好了,本节摸第一个部位:拼装。硬件事先造好零件再组装,软件同理。
一、组件是什么
类就是有标准接口的零件:内部藏着数据和实现,对外只露一组方法。 对接全靠方法调用:要用引擎就调 start(),不必知道点火线圈怎么绕——接口是零件的【插座规格】。 第二章造微机时,CPU 插座、内存插槽各有规格,插对就能用——软件组件的接口就是数字版的插座规格。
二、拼装的层次
小类拼成大类:引擎类+车轮类拼成汽车类; 大类拼成子系统:若干汽车类+道路类拼成交通模拟子系统; 子系统拼成整个程序——层层向上,每一层只跟相邻层打交道。 第二章的层次感一模一样:元件拼成部件、部件拼成主板、主板拼成整机。
三、拼装的前提:接口稳定
零件能互换,靠的是接口不变、内部随便换——发动机升级成 V8,油门踏板还是那个油门。 这条【接口稳定】的规矩,正是下一节【可维护性】红利的来源——拼装观和效率观是一根藤上的。
四、动手 Demo:把组件拼装到一起
造引擎、造车轮,再把它们拼进 Car 类,看拼装式开发怎么跑起来。
class Engine:
def start(self): return "引擎发动"
class Wheel:
def roll(self): return "车轮滚动"
class Car:
def __init__(self):
self.engine = Engine()
self.wheels = [Wheel() for _ in range(4)]
def go(self):
parts = [self.engine.start()]
parts += [w.roll() for w in self.wheels]
return " -> ".join(parts)
print(Car().go())
实跑输出:
--------------------------------------------------------------------
观点 1——把组件拼装到一起构建程序
--------------------------------------------------------------------
类就是【零件】: 先造小零件, 再拼成大机器。拼一辆玩具车试试:
第 1 步: 造引擎零件 (Engine 类)
第 2 步: 造车轮零件 (Wheel 类)
第 3 步: 把 1 个引擎 + 4 个车轮拼进车壳 (Car 类)
第 4 步: car.go() 试车:
引擎发动 -> 车轮滚动 -> 车轮滚动 -> 车轮滚动 -> 车轮滚动
零件类 提供的本领 拼装位置
-----------------------------------------
Engine start() 发动 车头 1 台
Wheel roll() 滚动 四角各 1 只
Car go() 整车跑 把零件装进来
第二章拼微型计算机是同一思路: CPU + 内存 + I/O 拼成整机。
软件里的拼装, 拼的是类; 对接全靠方法调用, 不问内部细节。
Car 类里没写一句【怎么发动引擎】——它只负责把零件拼起来再调用,这正是拼装者的本分。 第二章拼的是 CPU+内存+I/O,本节拼的是 Engine+Wheel——硬件软件,拼装同构。
30 秒实验
- 把一台电水壶拆成组件视角:加热类、控温类、外壳类,接口各是什么?
- 给你写的上个小程序找一处【能拆成两类】的地方,动手拆一次。
常见误区
- 以为拼装就是把代码堆进一个文件——拼装要求各零件接口清晰、互不掺和。
- 以为用类就是 OOP 了——类若大而无当、接口混乱,照样拼不起来。
自测三问(点开对答案)
1. 观点 1 把程序看成什么? —— 组件的拼装——类是零件,接口是插座规格。 2. 组件之间怎么对接? —— 只通过公开方法调用,不关心对方内部实现。 3. 本章哪个硬件章节与拼装观同构? —— 第二章——元件拼部件、部件拼整机。- ☐ 下一节(7.4 观点2:面向对象编程能够提升程序的开发效率和可维护性)
相关笔记
- 制作微型计算机所必需的元件 — 硬件拼装与软件拼装同构
- 要点6:了解结构体的组成 — 结构体是类的前身
- 💻 计算机是怎样跑起来的 · 索引