返回首页

OOP:开发者思维的自然基础 | 分析

这篇文章反驳了关于 OOP 的神话,通过 Unix 系统调用和 C 库的例子证明其在 OO 语言出现之前就存在。它展示了对象范式根植于人类思维,作为一种自然分类方法。它分析了刚性层次结构的局限性以及范式发展的前景。

OOP — 对自然的致敬:思维如何塑造代码
Advertisement 728x90

# 面向对象编程:思维的自然基础还是人为构造?

面向对象编程通常被视为编程语言的发明,但它的根源要深得多——根植于人类思维的本性本身。我们来揭穿关于 OOP 的神话,并证明对象范式早在 C++ 或 Java 出现之前就已存在,其原则不仅嵌入代码中,还体现在日常交流中。

OOP 早在面向对象语言出现之前就已存在

一个常见的误解:面向对象随着 C++ 的出现而诞生。实际上,它的元素早在面向对象语言时代之前就已存在于系统中。只需看看类 Unix 操作系统的系统调用。例如 write() 函数:它在没有一行 C++ 代码的情况下就展示了关键的 OOP 原则。

这个系统调用对用户隐藏了实现细节(封装),支持不同类型的对象(文件、套接字、设备——多态),并允许继承行为(例如,向 TCP 和 UDP 套接字写入数据使用共享的数据传输机制——继承)。抽象层次结构如下所示:

Google AdInline article slot
  • 抽象文件

- 套接字

- UDP

- TCP

Google AdInline article slot

- 磁盘文件

- 设备

- 块设备

Google AdInline article slot

- 字符设备

- 管道

同样的模式也出现在 C 库中。例如,通过 TRex 库实现正则表达式:

TRex _trex_compile(const TRexChar pattern, TRexChar error);
void trex_free(TRex exp);
TRexBool trex_match(TRex exp, const TRexChar text);
TRexBool trex_search(TRex exp, const TRexChar text, const TRexChar** out_begin, const TRexChar** out_end);

在这里,你可以清楚地看到 TRex 类,带有构造函数、析构函数和方法。由于库的简单性,没有多态,但结构是面向对象的。OOP 并非被发明出来——它被编程语言正式化,而在 C 代码和系统 API 中,它早已 de facto 存在。

对象范式的认知基础

支持 OOP 的主要论据在于编程之外:人类思维本质上是分类性的。每个名词、动词或形容词都定义了一个类或属性:

  • “红色”——具有特定颜色的对象(接口 IColorful
  • “游泳”——实现 IMovable 行为的交通工具
  • “家具”——抽象类,具体化为“椅子”或“沙发”

英语通过冠词反映了这种逻辑:不定冠词(a table)引入一个类,定冠词(the table)——特定实例。这种结构直接对应 OOP 原则。面向对象编程并非时尚之作;它是大脑处理信息自然方式的反映。

然而,现实世界比任何分类都更复杂。一个对象可以同时属于多个类(桌子既是家具、木制品,又是洪水时的浮具)。僵硬的 OOP 层次结构往往无法处理这种多维性,导致人为约束。但这不是范式的缺陷——而是任何建模的必然结果:完美的世界地图就是世界本身。简化不可避免,OOP 只是管理复杂性的一种工具。

为什么 OOP 不会消失

OOP 将被函数式编程取代的神话忽略了一个关键事实:范式不会相互取代——它们相互补充。函数式方法擅长数据处理,但对象模型在实体交互主导的领域(如 GUI、分布式系统、游戏)仍不可或缺。

Dog/Cat 类等例子批评 OOP 的“人为性”是不公平的。现实世界的例子在于系统 API 和库中,那里对象建模物理或抽象实体(文件、网络连接、事务)。问题不在于范式,而在于浅层应用。OOP 与认知过程的深度整合,确保其在人们创建软件时始终相关。

关键要点

  • OOP 在专用语言出现之前早已存在于系统 API 和 C 库中
  • 对象结构反映了人类分类事物的自然方式
  • OOP 层次结构的僵硬性不是范式缺陷,而是建模简化的必要性
  • 编程范式不会相互取代——它们根据任务相互补充
  • 选择范式的关键标准是与问题领域的契合度,而非潮流

总之:OOP 不是昙花一现的潮流——它是根植于人类感知的根本工具。其演进通过混合方法继续(如对象-函数式语言),但核心原则将始终相关。开发者必须理解范式的不仅仅是语法,还有哲学,以避免模板化解决方案,并构建匹配真实系统实体的架构。

— Editorial Team

Advertisement 728x90

继续阅读