首页 › programming › 面向对象六十年:四个支柱与三张罚单

面向对象六十年:四个支柱与三张罚单——一堂485万人上过的入门课,今天还剩多少真金

导语

在“学编程”这个品类里,播放量最高的视频教你写下第一行代码,而第二梯队的视频,教你怎么“想”代码。Programming with Mosh 频道的《Object-Oriented Programming, Simplified》(面向对象编程,简明版)属于后者:484.9万次播放,讲的不是某门语言的语法,而是一个所有程序员都绕不开、却很少有人真正想透的东西——面向对象(Object-Oriented Programming,OOP)。这门1967年诞生于挪威的老手艺,撑起了 C++、Java、C# 的黄金时代,也在最近十年挨了最狠的批评。2026年,当 AI 开始替人写方法体,它非但没有作废,反而显出了新的价值:生成代码的成本趋近于零之后,“划边界”成了人类剩下的看家活。本文把这堂课拆成四个支柱和三张罚单——前半部分是视频主线,讲清 OOP 到底在解决什么问题;后半部分是延伸分析,讲清它欠下的账,以及今天还值得带走什么。

视频背景卡片

核心内容拆解:四个支柱与三张罚单

要点一:先立靶子——程序不该是一串指令,而该是一个“社会”【视频主线+本文延伸】

这类概念课的第一步,都是把初学者从“过程式”的直觉里拽出来:程序不是一条从上到下执行的指令清单,而是一群对象(Object)互相协作的“小社会”。每个对象把数据和操作这些数据的行为打包在一起;而类(Class)是生成对象的图纸——类是印章,对象是盖出来的章。视频用日常事物做类比来讲这一层(按该课公开主题归纳),这正是它“Simplified”的意义:先建立世界观,再谈语法。

【本文延伸】补一层背景:这个观念革命不是凭空来的。1967年,挪威计算中心的 Ole-Johan Dahl 和 Kristen Nygaard 发布 Simula 67——为了写“模拟真实世界”的程序(港口调度、交通流),他们天然需要把世界拆成一个个“会自己做事的东西”,对象和类由此诞生(据公开资料,两人后于2001年获图灵奖)。所以 OOP 的起点从来不是“代码美学”,而是一个建模问题:怎么让程序结构和问题结构对得上。理解了这一点,后面四个支柱才不是四条死规矩,而是同一个建模思路的四个侧面。

要点二:封装——把状态装箱,更要给状态配守门人【视频主线+本文延伸】

四大支柱的第一根是封装(Encapsulation):把数据和操作数据的方法捆在一个对象里,把内部细节设为私有(private),只通过公开方法与外界打交道。视频强调的是封装的直接收益——外界不能随手篡改对象的内部状态,代码因此更不容易被误用(按该课公开主题归纳)。

【本文延伸】这里值得把话说重一点:封装的真正价值不是“藏起来”,而是守住不变量(invariant)。一个“银行账户”对象之所以封装余额,是因为它要对全体外界承诺一条规则:任何时刻,余额都不可能非法——扣款前必须查余额,改动必须留痕。这条承诺由对象自己昼夜值守。反过来说,如果你给每个私有字段都自动生成 getter/setter,然后所有代码都拿 setter 随便改,那封装就是个漏气的胶囊——语法上私有,事实上裸奔。初学者最容易在这一步“学会了语法、丢掉了精神”:封装是纪律,不是关键字。

要点三:抽象——接口是承诺清单,不是功能橱窗【视频主线+本文延伸】

第二根支柱是抽象(Abstraction):在封装之上再收一层,只向使用者暴露“必要的操作”,隐藏“如何实现的细节”。视频里常用的类比是开车:你只需要方向盘、油门、刹车这几个接口,不需要理解内燃机每个冲程(按该课公开主题归纳)。

【本文延伸】抽象是四个支柱里最考验品味的。好抽象的标准不是“藏得多”,而是接口稳定、实现可换:承诺给出去的东西十年不改,底下的实现想怎么重写就怎么重写——这就是“面向接口编程”的全部秘密。反过来的陷阱叫“抽象泄漏(leaky abstraction)”:接口的方法名、参数、异常里悄悄漏出了实现细节,于是你永远换不掉底层。给初学者一个可操作的判据:设计接口时只问“使用者想完成什么”(动词),不问“我内部有什么”(名词)——前者产出稳定的接口,后者产出越背越重的功能橱窗。这一条到2026年依然成立,因为接口的“稳定承诺”正是多人协作和 AI 生成代码时的契约面。

要点四:继承——最省事的复用,也是最危险的复用【视频主线+本文延伸】

第三根支柱是继承(Inheritance):子类自动获得父类的字段和方法,在“is-a(是一个)”关系上建立层次,从而消除重复代码。视频把它作为代码复用的经典手段介绍(按该课公开主题归纳)。

【本文延伸】必须立刻补上工业界用几十年教训换来的警示:继承是最强的耦合——子类不仅依赖父类的接口,还依赖父类的实现细节,父类一改,子类可能悄悄崩掉,这就是著名的“脆弱基类问题(fragile base class)”。Barbara Liskov 在1987年提出的里氏替换原则(LSP)给了继承一条铁律:任何父类出现的地方,子类必须能无感替换、且程序行为依然正确——做不到这一点的继承,是假继承,是“我图你代码”的偷懒。所以现代工程共识是:继承要为多态服务(我要统一接口),不要为复用服务(我想要你那段代码)。为复用,请用组合。这条分界线,恰好接出下一根支柱。

要点五:多态——同一句话,不同对象各自接住【视频主线+本文延伸】

第四根支柱是多态(Polymorphism):“同一个接口,多种形态”——调用方只管发消息,不同类型的对象各自决定怎么响应。视频按惯例把多态描述为消灭大面积 if/switch 分支的手段:新增一种类型,调用方代码一行不改(按该课公开主题归纳)。

【本文延伸】多态是四支柱中唯一“纯赚”的一根:它对应的工程原则叫开闭原则(对扩展开放、对修改关闭),是框架设计的地基。框架和库的“魔法感”大多来自这里——你实现一个接口,框架在恰当时机反过来调用你,所谓“好莱坞原则:别打电话给我们,我们会打给你”。给初学者一个真实的体感参照:图形程序里 shape.draw() 一行, circle 和 rectangle 各自接住,就是多态;没有它,每加一种图形,全项目几十处 switch 都要跟着改。多态把“修改旧代码”的风险,换成了“新增新代码”的安全——这是面向对象能统治企业软件三十年的核心技术账。

要点六:罚单一——你想要一根香蕉,却得到一只大猩猩和整个丛林【本文延伸】

四大支柱讲完是“官方叙事”,下面是三张罚单。第一张,开给继承滥用:Erlang 之父 Joe Armstrong 在《Coders at Work》(2009)里留下那段著名抱怨——面向对象语言的麻烦在于它们自带隐式环境:你想要一根香蕉,得到的却是一只举着香蕉的大猩猩,还有大猩猩背后的整个丛林。你想复用父类里一个小方法,却被迫把整棵继承树的构造、依赖、副作用全部拖进项目。有意思的是,解药写在 OOP 阵营自己最畅销的书里:1994年 GoF 四人组的《Design Patterns》开篇即忠告“优先使用对象组合而非类继承”。最权威的 OOP 著作第一页就在警惕 OOP 最被滥用的特性——这不是打脸,这是成熟:工具书知道读者会把手艺用到过火。

要点七:罚单二与罚单三——模式拜物教,以及函数式与数据导向的反攻【本文延伸】

第二张罚单,开给“模式拜物教”:90年代末,《Design Patterns》的23个模式被不少团队当成高级必修课,简历上写满 Singleton、Visitor、Abstract Factory——为两三个方法的小模块套上五层抽象,过度设计反而成了新负债。模式是“前人踩坑的地图”,不是“必须集齐的卡牌”。第三张罚单,来自范式竞争:近十几年,函数式思想大举回归——JavaScript 和 Python 里一等公民的函数、Java 8(2014年)引入 lambda、React 的数据流、Rust 的数据导向设计;Rich Hickey 2011年的著名演讲《Simple Made Easy》更是把“简单与容易之别”讲成了反复杂度的宣言(以上均据公开资料)。OOP 从“唯一正确范式”退位为工具箱之一——但注意,这是祛魅,不是死刑。今天主流语言全是多范式混血:用对象管边界、用函数做变换、用数据流做集成,范式的钟摆停在“共存”的位置上,才是真实的世界。

要点八:2026年的读法——AI 写代码之后,“划界”反而更值钱【本文延伸】

把这门六十年前的手艺放回今天,有个新结论:AI 编程工具改写的是“写字的成本”,不是“设计的责任”。生成一个方法体已经几乎免费,但决定哪里是类的边界、接口长什么样、什么该藏起来、谁该依赖谁——这些是需要理解业务、权衡未来的判断,AI 可以建议,拍板的仍然是你(本文观点)。换句话说:当代码产量暴涨十倍,“review 边界”成了新的瓶颈工位。OOP 训练的恰恰是这个肌肉——先想清楚世界上有哪些“名词”、各自对谁负责,再动手写“动词”。四个支柱里,封装教你说“不”,抽象教你说“就这些”,多态教你说“以后好加”,这三句话翻译成2026年的语言,就是:接口是你(人类)留给 AI 和同事的契约;契约设计得好,生成的代码才有地方安放。支柱会老,划界的品味保值——这是这门老手艺今天最大的真金。

知识结构图

flowchart TD
    ROOT["面向对象 OOP<br/>程序 = 对象之间的协作"] --> B1["类与对象<br/>类是图纸 对象是实例"]
    ROOT --> B2["历史脉络<br/>1967 Simula 起于建模<br/>Smalltalk 与 C++ 发扬"]
    ROOT --> PILLARS["四大支柱"]
    PILLARS --> P1["封装 Encapsulation<br/>状态装箱 守住不变量"]
    PILLARS --> P2["抽象 Abstraction<br/>接口是稳定承诺"]
    PILLARS --> P3["继承 Inheritance<br/>is-a 层次 最易滥用"]
    PILLARS --> P4["多态 Polymorphism<br/>同一接口 各自接住"]
    P1 --> R1["收益: 状态受保护<br/>风险: setter 满天飞 = 漏气胶囊"]
    P3 --> R2["收益: 层次复用<br/>风险: 脆弱基类 强耦合"]
    P4 --> R3["收益: 新增不改旧码<br/>对应开闭原则"]
    ROOT --> TICKETS["三张罚单 本文延伸"]
    TICKETS --> T1["香蕉与大猩猩<br/>继承拖出整座丛林"]
    TICKETS --> T2["模式拜物教<br/>GoF 忠告: 组合优于继承"]
    TICKETS --> T3["函数式反攻<br/>范式从独尊到共存"]
    ROOT --> FUTURE["2026 读法<br/>AI 写实现 人类划边界<br/>接口 = 留给协作的契约"]

实战启示

一、动手前先做“名词清单”。 拿到需求别急着写函数,先把需求描述里的名词圈出来(订单、购物车、用户、优惠券)——每个值得记住状态的名词,就是一个候选类;再把动词圈出来(下单、支付、退款)——动词就是方法。一张两列表格,就能让“程序结构和问题结构”对上号。这是 Simula 时代的老办法,也是今天对抗“AI 一口气生成一坨代码”的最有效前置工序:先有人类认可的名词表,AI 的实现才有正确的容器。

二、用继承之前过三道安检。 ①我用继承是为了“统一接口”(多态),还是仅仅“想要父类的代码”?后者请改用组合。②子类能通过父类的所有单元测试吗?过不了,违反里氏替换,这是假继承。③父类未来三个月会不会大改?会的话,继承链就是多米诺骨牌。三道安检默认把你推向组合——这不是保守,是行业三十年血泪的平均值。

三、接口瘦身,给契约设“防泄漏”检查。 一个接口方法超过五个就该起疑:是不是把“内部有什么”当成了“能做什么”?定期问一个问题——如果明天要把底层实现整个换掉,这个接口哪些方法名、参数、异常会出卖旧实现?出卖的部分就是泄漏点。AI 时代这条更关键:接口是你和 AI 之间的契约面,契约越干净,生成代码越不容易跑偏。

四、把 OOP 当“划界健身房”练。 一个低成本练习:读任何开源项目时,别看它怎么写函数,先只看它的类图和接口——猜每个类的职责,再看代码验证。每天十分钟,两个月后你对“边界”的手感会明显不同。

延伸学习路径

  1. Programming with Mosh《Python for Beginners - Learn Coding with Python in 1 Hour》(2,524万播放)— 同频道的语言入门课,与本课构成“先会写、再会想”的完整入门动线:https://www.youtube.com/watch?v=kqtD5dpn9C8
  2. Wikipedia: Object-oriented programming — 概念全景地图,Simula/Smalltalk 谱系与各语言实现差异一览:
  3. Refactoring.Guru: Design Patterns — 23个经典模式的图解版,把“罚单二”变成正向资产的最佳免费教材:https://refactoring.guru/design-patterns
  4. Wikipedia: SOLID — 五大面向对象设计原则(单一职责、开闭、里氏替换、接口隔离、依赖倒置),入门课之后的下一级台阶:
  5. Sandi Metz《99 Bottles of OOP》 与 Peter Seibel《Coders at Work》(2009)— 前者讲“怎么把代码改到对象各司其职”,后者收录 Joe Armstrong“香蕉与大猩猩”等大师访谈原文(书籍信息据公开出版资料)。

一句话总结

面向对象教的从来不是语法,而是划界的品味——对象怎么分、接口怎么留、边界怎么守;在 AI 替你打字的时代,这门品味不是过期了,而是刚刚开始定价。

参考来源

本文由「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 等场景全覆盖。

51学通信知识星球海报-扫码加入