面向对象编程的发展背后有什么想法?

时间:2010-05-25 19:43:27

标签: language-agnostic oop history

我手上有一些真正的说话者,我试图告诉他们为什么首先开发OOP的原因。我意识到OOP并不适用于所有问题和情况,但它是出于某种原因而开发的......

我的猜测是,其中一些原因是:

  • 可维护性
  • 重新使用性
  • 文献能力
  • 复杂技术的抽象
  • 运行时的动态扩展......
  • 可能还有一些我甚至都不知道的事情......

但我真的没有多少支持这一点,我想知道为什么OOP首先是开发的,而且它是历史。

开发OOP试图完成的人是什么?是什么导致他们发展OOP?

7 个答案:

答案 0 :(得分:3)

我一直认为创建面向对象编程是为了让我们能够以人类可以理解的方式思考复杂问题:

世界上的一切都是一个对象,对象具有属性,一些对象甚至可以执行操作(或对它们执行操作)。

答案 1 :(得分:2)

创造“面向对象编程”一词的Alan Kay有几次explained his thinking

基本上,他从生物学中得到了这个想法 - 每个细胞是一个独立实体的方式,只通过“消息”与其他细胞相互作用,而不知道其他细胞如何实际工作,所有这些自主实体都添加一个活生生的有机体。他认为,这种将责任分工的方式,以及许多照顾自己并仅通过发送信息进行沟通的实体,可以更容易地保持计划的有序性。他还说,他认为万维网是这种模式的延伸。

答案 2 :(得分:1)

您可以为辩论做出贡献的一个原因是OOP使用类,函数和属性帮助模拟现实世界,以抽象的方式定义具体的概念和对象。有人可能会争辩说,OOP希望在构成特定问题空间的现实世界流程和对象之后帮助开发人员建模代码。

答案 3 :(得分:1)

Bertrand Meyer撰写的一本好书是Object-Oriented Software Construction被广泛认为是面向对象编程的基础文本)。来自维基百科页面:

  

这本书在粉丝中被称为“OOSC”,它将对象技术作为软件工程主要问题的解决方案,特别强调解决软件质量因素的正确性,稳健性,可扩展性和可重用性< / strong>即可。首先考察软件质量问题,然后介绍抽象数据类型作为对象技术的理论基础,并继续使用主要的面向对象技术:类,对象,通用性,继承,契约式设计,并发性和持久性。它包括对方法问题的广泛讨论。

答案 4 :(得分:1)

保罗·格雷厄姆(Paul Graham)列出了人们喜欢OOP的原因:

http://www.paulgraham.com/noop.html

答案 5 :(得分:1)

除了理论之外,真正推动采用OOPS的是基于Windows的GUI的到来。

如果您只是编写DOS或大型机终端应用程序,那么您真的不需要OOP,确定它可能有用,但没有令人信服的理由采用它。但是,只要你开始编写任何基于'wimp'的GUI,那么在没有OOP的情况下有效地处理它是非常困难的,特别是当你超越一个简单的系统时。

当Pascal是默认语言时,我为Mac编写了代码,你必须处理自己的主事件循环,并且当窗口覆盖在窗口中时,这样做会在矩形中重新绘制窗口。它的前面。因此,即使是最简单的程序,也只涉及基本的基础设施,并且保持一个接口的清洁并不是一项微不足道的任务,因此代码不会陷入纠结的意大利面。 Windows(阅读任何早期的Charles Petzold'编程窗口书籍)以及当时的各种其他GUI都是如此。

OOP的采用极大地简化了这一点,因为OOP非常适合GUI。如今我们认为这是显而易见和自然的,但并非总是如此,当然OOP的采用被认为是当时程序员面临的重大挑战。然而结果是所有新的程序员自90年代末以来都已经成长为OOP,因为它真的需要处理GUI,结果它几乎是默认的编码方式,因此它的使用已广泛传播到界面之外。

答案 6 :(得分:0)

我认为首先动机的OOP是这些事实(或者我应该说假设?):

  • 我们自然会根据对象/事物来思考
  • 对象很好地捕捉/模拟现实
  • 对象可以在整个开发中统一使用。过程(要求,分析,实施)

这是否真的是另一个问题。请参阅Do We Think in Terms of Objects

OOP的本质是

  • object = identity + data + behavior

OOP语言提供的确切功能也是另一个问题。请参阅wikipedia page

PS:许多所谓的面向对象代码实际上是伪装成面向对象代码的程序代码。我们所知道的OOP的主要问题是,当责任无法轻易分配给一个对象时,它需要经验来捕获对象之间的协作。