HackerTube ?

Object-Oriented Programming is Bad

Brian Will在 YouTube 播放 ↗

字幕解读

Brian Will 将面向对象的主要问题定位在行为与数据类型的细粒度绑定:新增或改变数据类型时,相关行为要分散修改,封装反而制造耦合。他偏好以普通数据和过程式函数组织多数程序,必要时用参数传递依赖、用纯函数降低状态交互,并用较粗粒度模块封装。演讲也承认类、抽象数据类型和测试仍有合适场景。

自动字幕 · 引文按字幕原文展示,可点时间戳回看片段。

内容要点

  • 演讲批评的是把行为绑定到许多具体数据类型所产生的改动负担,而非类或抽象本身。
  • 普通函数和显式参数可减少跨对象状态依赖;避免把程序切成过多微小单元。
  • 封装仍有用,但应围绕稳定边界和整体模块,而不是把每个数据类型都当行为容器。
视频章节 6
  1. 问题不在于类本身
  2. 类型与行为绑定
  3. 函数和数据的组织
  4. 共享对象与状态
  5. 过程式替代及其边界
  6. 封装粒度与横切关注点
具体观点与证据 4

细粒度对象封装并未消除多个对象间共享可变状态的协调问题。

讲者批评细粒度封装,不等于否定所有模块边界。

as soon as you have objects being shared encapsulation just flies out the window
探索此观点 →

强行将每种行为归给一种数据类型会制造缺少实际数据意义的类。

针对把所有行为都做成方法的设计规范。

they exist simply as attacks to conform to this ideology about code modularization
探索此观点 →

把长逻辑切碎未必降低总复杂度,也可能只是把复杂度分散。

复用或隔离复杂逻辑仍是抽函数的理由。

are we actually decreasing the total complexity of our program or just displacing the complexity
探索此观点 →

纯函数容易独立理解,因为推理无需考虑外围状态。

讲者同时提醒效率和适用范围。

the brilliant thing about pure functions is that they're the only truly self-contained unit of code
探索此观点 →
补充字幕原文 2

作者明确把问题放在某类组织耦合上,而非直接否定类。

the problem is really not classes per se

围绕数据类型绑定函数会令类型变化牵动相关行为。

association between certain functions and certain data types
解读边界

这是对常见 OOP 组织方式的批判性演讲,例子偏向作者选择的代码结构;结论不证明过程式设计总是更优,也没有系统比较大型团队下的模块化代价。

相关视频与证据 1

不同设计路径都在写类,却对面向对象给出不同建议

Metz 建议把类、方法和相互依赖变小;另一位讲者主张转向过程式风格,却明确说问题并不在类本身。两个片段帮助区分语言构造与组织代码的方式。

关联视频

RailsConf 2014 - All the Little Things by Sandi Metz ↗

演讲的核心建议是拆小类与方法,并降低组件彼此需要了解的内容。

make smaller things
▶ 0:54–0:58 · 观看片段
当前视频

Object-Oriented Programming is Bad

作者明确把问题放在某类组织耦合上,而非直接否定类。

the problem is really not classes per se

适用边界 不能从标题推断两人对每种类设计都直接对立;这些片段不构成相互回应。

Hacker News 评论

查看 HN 原评论 ↗