我的猜测是,其中一些原因可能是:
- 可维护性 - 可重用性 - 可文档化性 - 抽象复杂技术 - 在运行时进行动态扩展... - 也许还有一些我还不知道的东西...
但我真的没有太多证据来支持这一点,我想知道为什么首先开发了面向对象编程以及它的历史。
开发面向对象编程的人试图实现什么?是什么导致他们开发了面向对象编程?
我一直认为面向对象编程是为了让我们以人类能理解的方式思考复杂问题而创建的:
世界上的所有事物都是对象,对象具有属性,某些对象甚至可以执行操作(或接受操作)。
阿兰·凯(Alan Kay)是“面向对象编程”一词的创造者,他在多个场合解释了他的思想。
基本上,他从生物学中得到了这个想法——每个细胞都是一个自包含的实体,只通过“消息”与其他细胞交互,而不知道另一个细胞的工作方式,所有这些自治实体汇聚成一个生物体。他认为,通过这种方式划分责任,许多实体可以照顾自己,并且只通过发送消息进行通信,这将使程序更易于组织。他还表示,他将万维网视为这种模型的延伸。
你可以参与这场辩论的原因之一是,面向对象编程(OOP)使用类、函数和属性来定义具体概念和抽象对象,有助于模拟现实世界。可以说,OOP旨在帮助开发人员将代码建模为特定问题空间中构成过程和对象的现实世界。
这方面的好书是Bertrand Meyer的Object-Oriented Software Construction(被广泛认为是面向对象编程的基础文本)。根据维基百科页面:
这本书,被粉丝们称为“OOSC”,将对象技术作为解决软件工程主要问题的答案,特别强调解决正确性、健壮性、可扩展性和可重用性等软件质量因素。它从软件质量问题的考察开始,然后介绍抽象数据类型作为对象技术的理论基础,并继续介绍主要的面向对象技术:类、对象、泛型、继承、按合同设计、并发和持久性。它包括了对方法论问题的广泛讨论。
Paul Graham列举了很多人喜欢面向对象编程的原因:
我认为最初推动面向对象编程的原因是以下事实(或者说假设):
这是否真的正确是另一个问题。请参见我们是否以对象为中心思考。
面向对象编程的本质是
面向对象编程语言提供的确切功能是另一个问题。请参见维基百科页面。
附:许多所谓的面向对象代码实际上是伪装成面向对象代码的过程式代码。我们目前所知道的面向对象编程的主要问题是,当一个责任不能轻易地分配给一个对象时,需要经验来捕捉对象之间的协作。