如果每个人都讨厌它,为什么OOP仍然如此广泛地传播?

在1981年8月版的《字节》杂志上,大卫·罗布森(David Robson)打开了他的文章,文章成为许多人"面向对象的软件系统"的引入,他当面承认,这与许多熟悉强制性、自上而下编程的人习惯的相去甚远。

"许多不知道计算机如何工作的人发现以对象为导向的编程的想法很自然。相比之下,许多对计算机有经验的人最初认为面向对象的系统有些奇怪。

可以公平地说,几代人之后,将代码组织成更大的有意义的对象,为问题中的某些部分建模的想法继续困扰着程序员。如果它们用于自上而下的编程或功能编程,将代码元素视为精确的数学函数,则需要一些时间才能适应。在最初的炒作期承诺改进模块化和组织大型代码库后,这个想法被过度应用了。随着 OOP 之后是 OOA(面向对象的分析)和 OOD(面向对象的设计),它很快感觉您在软件中所做的一切都必须细分为对象及其彼此之间的关系。然后,批评家们来到了现场,他们中的一些人非常失望。

有人声称,在OOP的写作测试下,要困难重做,需要格外小心。有开销时重复使用的代码,埃尔朗的创造者有名的描述的情况下,当你想要一个香蕉,但你有一个大猩猩拿着香蕉。一切都伴随着一个隐含的,不可避免的环境。

描述这种解决问题的新方法的其他方法包括将一个势在必行的程序员类比为"厨师或化学家,遵循食谱和公式以达到预期的结果",以及将对象导向的程序员类比为"希腊哲学家或19世纪的博物学家,关注编程世界的适当分类和描述"。

成功只是巧合吗?

OOP仍然是目前的主要范式之一。但是,这可能是由于语言的成功,谁碰巧是OOP。Java、C++和科特林为Android和Swift和目标C为iOS规则移动,因此除非您了解面向对象的方法,否则无法开发移动软件。对于网络来说,它是爪哇脚本,蟒蛇,PHP和红宝石。

问为什么这么多广泛使用的语言是OOP可能会混淆因果关系。理查德·费尔德曼在谈话中辩称,这可能只是巧合。C++由Bjarne Stroustrup在20世纪80年代初开发,最初是作为C编程语言的延伸。在 C 的基础上,C++增加了对象方向,但 Feldman 认为,从 C 整体升级(包括类型安全性)以及自动资源管理、通用编程和异常处理等功能的额外支持,它变得很受欢迎。

然后,Java想吸引C++程序员,并在OOP部分翻倍。 最终,太阳微系统公司希望通过为采用Java的开发人员提供最熟悉的技术来重复这一C++把戏。

由于当时在 Web 浏览器中的独家集成,数百万开发人员迅速迁移到 Java。从这个方向看,OOP似乎只是搭便车,而不是推动成功。

OOP 可以做些什么是独一无二的?

OOP 有一些有价值的方面,其中一些方面即使有缺点,也会使其无处不在。让我们看看OOP的基石。

封装。这意味着数据通常隐藏在语言的其他部分-放置在胶囊中,如果你会。OOP 默认封装数据;对象包含影响该数据的数据和方法,良好的 OOP 实践意味着您提供获取器和设置方法来控制对该数据的访问。这可保护可变数据不被任性更改,并使应用程序数据更安全。

据推测,这是OOP的最大好处之一。尽管它通常与面向对象的编程相关联,但概念本身实际上与它分离,无需使用对象即可实现。抽象是一个补充的概念,以封装在这里:在封装隐藏内部信息的地方,抽象提供了一个更容易使用的公共界面数据。在任何情况下,它都不是唯一的 OOP 功能,可以通过模块隔离系统功能或模块内这些数据的一组数据和操作来完成。

继承。因为对象可以创建为其他对象的子类型,因此它们可以从这些对象中继承变量和方法。这允许对象支持由前类型定义的操作,而不必提供自己的定义。目标是不要重复自己——很难维护同一代码的多种用途。但功能编程也可以通过可重复使用的功能实现 DRY。内存效率也是如此。尽管继承确实促成了这一点,但 FP 中的关闭概念也是如此。

虽然继承是OOP的具体想法,但一些人认为,通过组成可以更好地实现遗产的处。如果你失去了继承,对象和方法会迅速溶解为结构和程序的语法糖。请注意:继承也是允许多态性的必要,我们在下面讨论。

多态性。从字面上讲,改变形状,这个概念允许一个对象或方法,无论是通用的,界面,或常规的对象,作为其他对象和方法的模板。多态性有多种形式。单个函数可以超载、变形并适应其所处于的任何类别。面向对象的编程往往使用大量的子键式多态性和临时多态性,但同样,这不是一个仅限于OOP的概念。

似乎在2020年,OOP不能做其他编程范式所不能做到的,一个好的程序员将在对抗复杂性的斗争中一起使用多个范式的策略。例如,如果您查看最常显示的与OOP功能编程下标记的问题相关的标签,JavaScript 会同时弹出这两个标签。

会发生什么?

然而,OOP已经取得了很大的成功。这可能是一个庞大的行业,支持和支持OOP的结果。

那么开发人员本身呢?我们今年的开发人员调查显示,他们越来越受到购买的影响。那么,如果我们也看看开发人员喜欢与什么合作,哈斯克尔和Scala是最受喜爱的编程语言之一。斯卡拉给你的第二高。因此,也许随着更多的FP传道,他们也会登上最受欢迎的语言的名单

不过, 有一些运动, 像 Twitter 这样的大公司几乎完全在 Scala 代码上运行他们的后端。最近一直在应用哈斯克尔和许多主要OOP语言的Facebook也采用功能功能。。NET有LINQ和爪哇8引进兰姆达斯。尽管在 ES6 中引入了类,但 JavaScript 功能日益强大。Swift 可能是面向对象的语言和功能语言之间的快乐媒介。所以,也许没有必要选择:你可以有你的和它了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值