为什么有这么多开发者讨厌面向对象编程?
极客时间编辑部
讲述:初明明大小:3.55M时长:03:52
面向对象编程即 OOP 已经存在了很长时间,它是一种编码风格、一种思想流派、一种学校里的教授实践。它的核心思想是将代码组织成有意义的“对象”,这些“对象”是现实问题的模型,将描述模型各个“状态”的变量和修改这些变量的方法捆绑在一起。
面向对象编程思想与人们在现实世界中思考问题的方式是一致的,他们将代码组织成有意义的代码块,这些代码块之间有着各种直接的关系。他们最终得到的是不同类型的对象,这些对象之间进行离散的交互,相互交换数据状态变更消息。
但在实践当中,有些批评者声称,OOP 并不总是这么回事。高级全栈工程师伊利亚·苏兹达尼茨基(Ilya Suzdalnitski )是这种“憎恨者”阵营的一员,他发表了两篇文章表达他对 OOP 的不满,阅读量在一个月内达到了 50 万。
苏兹达尼茨基主要列出了几点他对 OOP 的不满:
OOP 没能把它本该解决的问题解决好,反而把事情变得更加复杂。OOP 代码的变量及其可变状态在不同的对象之间被随意共享。
面向对象代码难以重构,也难以进行单元测试,写出好的、可维护的面向对象代码很难……
程序员宝贵的时间和精力都花在思考“抽象”和“设计模式”上,而不是解决现实世界中的问题。
苏兹达尼茨基还指出 OOP 的另一个主要问题:并发。他写道:“OOP 生于单核 CPU 时代,那时的程序员不需要担心并发问题……而函数式编程(还有 Go 语言和 Rust 等)崛起的一个主要原因是它们能够有效地处理并发问题”。
他在文章最后指出,函数式编程将是更好的选择。函数式编程是 OOP 的竞争编程范式,在函数式编程中,问题不是被建模成对象,而是纯数学函数,并强调要避免让状态发生变化。
苏兹达尼茨基敢于挑战 OOP 编程范式的论调激起了其他开发者的强烈反应。其中有一个来自德克萨斯州的软件工程师杰西·迪克(Jesse Dickey)表示,OOP 这个名字本身就是个错误,应该把它叫作面向类编程,更准确地说,类应该是自定义类型。
在这不久之后,苏兹达尼茨基的文章引发了新的讨论,开发者开始对哪种编程范式更好产生了尖锐的分歧,是函数式编程还是面向对象编程。很快,他们又开始争论问题到底是该归咎于编程范式还是程序员本身。
面对读者的激烈反应,苏兹达尼茨基表示他一生中的大部分时间都在编程,他花了大量时间学习 OOP,但他得到的回报非常少。即使是简单的功能也需要大量时间来实现,而且代码库越大,实现起来就越困难。
近年来,他开始将函数式编程思想应用到他的 C# 代码中。随后,他所在的公司完成了向 JavaScript 的迁移。苏兹达尼茨基表示,在使用非 OOP 语言时,比如 JavaScript,函数可以独立于对象存在,自己再也不用为了包含这些函数而去发明一些奇怪的概念(比如 SomethingManager),这真是一种解脱。
这一切都让苏兹达尼茨基相信“OOP 是危险的,OOP 程序固有的非确定性让代码变得不可靠”。程序在运行时会有很多不同的路径,因为会有很多不同的对象,而且会不断动态创建出新的对象。苏兹达尼茨基称,“这种看似无辜的编程范式对世界经济造成的破坏性影响是人们难以理解的”。
苏兹达尼茨基知道他的观点会让一些人感到生气,他称自己在网上发表文章是为了激励开发者质疑 OOP 的好处,并尝试函数式编程,这样开发者就会写出更好、更可靠的代码了。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(1)
- 最新
- 精选
- 水表君但是函数式编程 项目大了 不也一样吗 一个函数里面全是各种逻辑2
收起评论