概述:编程教学频道 Programming with Mosh 的《Object-Oriented Programming, Simplified》是YouTube上面向对象入门课的常青标杆。本站抓取流水显示,仅9月24日至29日五天,它的播放量就从4,878,477涨到4,888,811——每天仍有约两千名初学者推门而入。这条视频把面向对象浓缩成四根柱子,讲得极清楚;但它也悄悄删掉了这个学科五十年的全部争吵。本文带你把视频学透,再把被删掉的那一层补回来。
| 项目 | 内容 |
|---|---|
| 视频标题 | Object-Oriented Programming, Simplified(直译:面向对象编程,一课讲透) |
| 频道 | Programming with Mosh |
| 发布时间 | 本次抓取页面未含该字段,不作标注;据频道页面,此课为频道多年常青经典 |
| 播放量 | 4,888,811(2026-09-29抓取);9月24日为4,878,477,五日净增约1万 |
| 链接 | https://www.youtube.com/watch?v=pTB0EiLXUC8 |
| 备注 | 片中强调四支柱与具体语言无关,学的是思想而非某门语法 |
Mosh 这节课的叙事结构非常克制:先让你疼,再给你药,一次给一帖。
第一步:先承认过程式的疼。 视频不从“什么是对象”讲起,而是先演示过程式写法的经典困境——数据和函数是分离的,数据散落在全局,函数围着一堆裸露的字段打转。你想改一个字段的含义,就得翻遍所有碰过它的函数;你忘了某处对它做过特殊约定,程序就在你看不见的地方塌掉。这个开场实际上在说:面向对象要解的不是“怎么写代码”,而是“怎么组织代码”。
第二根柱子:封装(Encapsulation)。 把一组相关的变量和操作它们的函数打包进一个对象,把内部状态设为私有,只留下少数公开方法作为出入口。Mosh 给出的收益有三层:调用者的视野变小了(不用关心内部字段);规则的执行点集中了(校验逻辑只在方法里写一次);内部实现可以随便换(只要接口不变,外部无感)。这是四根柱子里工程含金量最高的一根。
第三根柱子:抽象(Abstraction)。 封装管“藏”,抽象管“留”——对外只暴露操作按钮,不暴露齿轮。Mosh 用开车做类比:你踩油门,不需要知道喷油嘴的喷射时序。要注意视频里这两根柱子是有分工的:封装是防御性的(防止内部状态被乱改),抽象是减负性的(让调用者少装东西进脑子)。
第四根柱子:继承(Inheritance)。 公共的属性和行为上移到基类,子类只写差异,从而“消除重复代码”。这是四根柱子里今天争议最大的一根,视频以最正面的口吻讲了它——后文详说。
第五根柱子:多态(Polymorphism)。 同一个接口,不同类型给出不同实现,调用方不需要 if/switch 去区分“这是哪种类型”。视频的核心手法是把一长串按类型分支的条件语句,重构成每个类型各自实现的方法——加一个新类型,只需新增一个类,不改老代码。
贯穿全片有一条没明说的主线:四根柱子做的其实是同一件事——控制“变化”的影响范围。封装限制状态变化的外溢,抽象限制复杂度的人脑占用,继承和多态限制新增功能时对旧代码的改写。把这条主线抽出来,你就不是学了四个语法特性,而是拿到了一把评估设计的尺子。
这四个概念不是某位大师某天灵光一闪,而是半个多世纪里几代人对同一个问题的接力回答。
1. 一切始于1967年的挪威。 Ole-Johan Dahl 和 Kristen Nygaard 在挪威计算中心(NCC)推出 Simula 67,为了写仿真程序第一次引入了类、对象、继承。两人因此获2001年图灵奖。Simula 是“对象”概念的出生证明——它最初想解的其实是离散事件仿真里“大量相似实体各自带状态”的问题。
2. Smalltalk 与被丢掉的那半个思想。 1970年代施乐帕克(Xerox PARC),Alan Kay、Adele Goldberg、Dan Ingalls 等人造出 Smalltalk,把对象推向大众,Kay 因此获2003年图灵奖。但 Kay 后来在多次访谈与邮件列表发言中反复表达一个意思(大意):“我发明了面向对象这个词,C++ 那套不在我的本意里”——他强调的重点是消息传递和生物式的细胞模型,而不是类、继承这些东西。换句话说,今天教科书里的“面向对象”,从第一天起就丢掉了发明者最在乎的那一半。
3. 封装的真实学术源头:信息隐藏。 把“私有字段+公开方法”当成封装的全部,是入门课最常见的简化。它真正的源头是 David Parnas 1972年的经典论文《On the Criteria To Be Used in Decomposing Systems into Modules》:拆分模块的准则不是“数据和相关函数放一起”,而是把难以预料、容易变化的设计决策藏进模块内部。Parnas 的问题意识比语法层面深一层——封装的本质是“为变化划边界”,私有字段只是实现手段之一。
4. 抽象的家谱:抽象数据类型。 “只留接口不留实现”的系统化理论是 Barbara Liskov 与 Stephen Zilles 1974年的《Programming with Abstract Data Types》,抽象数据类型(ADT)第一次把“类型的数学含义”和“它的机器表示”分开。Liskov 后来在1987年 OOPSLA 主题演讲中提出著名的里氏替换原则(子类型必须能无缝替换父类型),并于2008年再获图灵奖。视频里“抽象”那一节,就是这传统的入门版。
5. 多态的两种面孔。 “同一个名字不同行为”至少有两种:Christopher Strachey 1967年就区分了 ad-hoc 多态(函数重载)与参数多态(泛型)。视频演示的“子类重写方法”属于第三种——子类型多态。入门课通常只讲这一种,知道另外两种的存在,你看语言设计的文章时才不会迷路。
6. 《设计模式》与它自己的第一条警告。 1994年 GoF 四人组的《Design Patterns》把OOP推向神坛,但很多人没注意这本书第一章就写着原则:“优先使用对象组合,而不是类继承”。没错,把继承捧红的这本书,自己一开始就对继承点了刹车。
(1)站得住的部分。 信息隐藏作为控制耦合的手段,是软件工程半个世纪最稳定的共识之一,无论语言范式怎么变都没被动摇过。“以多态取代条件表达式”也是重构学科的标准手法(Martin Fowler《重构》第二版中列为正式重构项),在插件、渠道、格式这类“同一动作多套实现”的场景里确实优雅。视频把这两点讲得扎实,初学者照做不会有问题。
(2)被显著简化的部分:继承。 “继承消除重复代码”这句视频里的正面表述,在今天的工程共识里几乎被反转了:用继承来复用代码,恰恰是它最危险的用法。实现复用会让子类绑死在父类的内部细节上——1998年起就有对“脆弱基类问题”(fragile base class problem)的系统研究:父类一个不起眼的内部改动,能悄无声息地破坏所有子类的假设。所以现代语言纷纷用脚投票:Go 干脆没有继承(结构体嵌入+接口),Rust 用 trait 组合,Kotlin、Swift 都在语法层鼓励组合、限制继承(默认 final)。视频作为入门课把继承讲得四平八稳,可以理解,但学习者应当知道:继承只该用于“行为替换”(配合多态),不该用于“代码复用”(那是组合的活)——这条分界线,视频没有画。
(3)被悄悄略过的时代争议。 视频把四支柱当作“好设计”的同义词,但这个等式在过去三十年被反复挑战,每一种挑战都有真实出处:
公平地说:这些争议没有一条推翻封装与抽象的价值,它们打击的是“四支柱=好设计”的过度推广。入门课删掉争议是一种教学取舍,不是过错;但只看入门课就以为地图即全部疆域,就亏了。视频给的是第一版地图,这一节补的是大陆的另一边。
1. 用“谁的状态会变”来设计,而不是“这是什么”来设计。 下一个类动手之前,先别问“这东西像现实里的什么”,改问 Parnas 的问题:哪些数据会被修改?谁能改它?变化会从哪里进来?把答案圈在一个边界里,类自然就长出来了。这比照着名词表建模可靠得多。
2. 给继承立一条红线。 每次想写 extends(或等价语法)时自问:我要的是“替换行为”(不同子类对同一消息各答各的)还是“复用代码”?前者合法,后者一律改组合。再补一条硬规则:继承树超过两层就强制重审。这一条能帮你躲开未来五年里最隐蔽的一类维护灾难。
3. 把 switch 链当成多态的警报器。 在自己的项目里全局搜一遍按类型分支的 if/switch——命令行参数分发、支付渠道路由、导出格式切换,是三块最常见的试验田。挑其中一处,动手把每个分支升级成一个类型的方法,感受一下“加类型不改老代码”的滋味。视频第五根柱子的价值,只有手上做过一次才真正拥有。
flowchart TD
A[过程式之痛<br/>数据与函数分离] --> B[封装<br/>把状态关进盒子]
B --> C[抽象<br/>只留按钮不留齿轮]
C --> D[继承<br/>公共代码上移]
D --> E[多态<br/>删掉类型分支]
E --> F{这套地图<br/>今天还成立吗}
F -->|信息隐藏| G[成立<br/>Parnas1972内核未变]
F -->|继承复用| H[被反转<br/>组合优先成共识]
F -->|语言演化| I[分化<br/>Go与Rust弃继承]
G --> J[结论<br/>四柱是入门地图<br/>不是设计宪法]
H --> J
I --> J
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
