导致面向对象编程成为主要编程范例的历史条件是什么?


14

有哪些经济(和其他历史)因素导致面向对象的编程语言产生影响?我知道Simula从头开始的,但是由于业务需求的不断增长,采用OOP语言是吗?还是采用该工具是因为OOP语言可以完成新的工作?

编辑 我真的最感兴趣的是,在语言本身之外是否存在一些因素,这些因素使它们得以保持。


这是有道理的,但是我想我对开发过程中发生的外部环境更感兴趣。很有可能是外部因素的作用有限。

我向您保证,即使是有关外部因素的问题,程序员也可以使用stackexchange。它拥有大量在该行业中积极工作的人,许多人自该行业起飞以来一直在工作。与这里相比,您更有可能找到一个对您的问题有很好答案的人。
选项

2
Smalltalk并未将其启动。 Simula创建了面向对象的基本概念。Smalltalk所做的就是采纳这些想法,并将其转变为一个非常不同的模型,并使用适当的名称。但是,值得注意的是,没有一种遵循OO的Smalltalk模型的语言在构建程序方面确实非常成功。(除了Objective-C例外,这是一个特例:Apple将它推到了所有人的一边,但Apple生态系统之外没有人使用它。)所有成功的OO语言:C ++,Delphi,Java,C#,等等,使用Simula模型。
梅森惠勒

1
乐高积木可能会作为外部影响因素加入
Jamie F

1
@梅森:不确定是如何划分Simula模型和Smalltalk模型的。你将Ruby放在哪里?LUA?蟒蛇?Javascript?
凯文·克莱恩

Answers:


10

简短答案

我认为这是在OO天之前流失的软件项目。OO通过添加至关重要的概念- 对现实世界建模 -的帮助。


第一种面向对象的编程语言是Simula早在1967年。但是,那时,实验室中仍在进行广泛的软件开发,并且大多数范例仍更接近于硬件案例。

在过去的整整十年时间里,用于企业应用程序的软件开发不断增长,其他商业应用程序也在不断增长,整个1970年代,软件开发得到了迅速发展。在那些时代(1980年之前)的今天仍然可以生存的语言是C,Cobol,Fortran和其他类似语言。这些语言大多数都是程序性的。从那一天开始,Lisp也就存在了-但是,我不确定这是否是商业开发的突出通用语言。著名的瀑布模型一词也是在1970年代初期创造的。

在大多数商业环境中,软件开发中最重要的要素是项目管理。迫切需要紧缩的预算(至少是可预测的预算)以及管理冻结的要求,以确保项目能够按时完成。在此期间,这也是1975年的《神秘男人》之一。

我猜到了70年代末,人们已经精疲力尽了,因为程序语言无法兑现这些承诺。自那时以来一直存在的新的面向对象范式使其变得庞大。尽管人们可能会不同意,但我认为C ++有助于熟悉和证明C的经验,而1983年的面向对象的承诺(最初带有类的名称C)是面向对象编程成功的基石。

一些参考资料可提供更多视角-http://journal.thedacs.com/issue/43/88

那为什么要OO呢?

我认为那些日子(如果您从项目成功的角度看)-可以更好地理解的东西将更易于管理,这是有道理的。承诺“ ..生活中的一切都是一个对象”的面向对象方法论,甚至在被证明是有意义的之前,就更像是常识。这个因素的实际成功是在跳枪之前就足以对现实世界和问题进行充分建模的想法-我认为OO提供了一些根本上新的东西,到那时为止还没有其他范式提供。绝对可以肯定的是,这种范例迫使您在编写比程序语言更多的代码之前要三思而行,它在所使用的软件项目上显示出明显的成功,从那时起,它们就流行起来了!

编辑
我还要补充一点,编程语言是与此类基本概念(OO范例,Aspect,虚拟机等)并行发展的,同时每个新概念和新思想只有在掌握了新的编程语言后才出现-仅保持熟悉度,而从核心!同时-这些新概念和新语言只是由于新的业务问题而出现。1980年代-面向大型软件的OO,1990年出现于Internet时代的Java,PHP / ASP以及许多其他的Web应用。编程语言的创新也主要是由不连续的市场需求驱动的。

总而言之,80年代初是大型商业软件兴起的时代-尽管使用过程语言的项目遇到了问题,但是OO显示了更好的亮点,并使项目更加成功。


转变的特征是什么?去哪里?70年代末。是什么让开发人员了解需要花些时间?是的,对程序感到厌倦,但是必须有替代方案吗?
独立时间:6:

@Jonas-好的-修改了答案。
Dipan Mehta'3

至于历史上的成功,我们正在评估-我们可以肯定地说,熟悉程度起着一定的作用。C(是B的继承人),尽管OO被认为是范式的转变,但C ++是更好的C。甚至Java都是从C ++跃跃欲试的(它更像是C ++,没有C ++问题,例如内存和可移植性)。这些语言中的大多数通过更有效地获取现有空间来克服鸿沟,即使它们具有更基本的功能。更重要的是,因为每种语言都会吸引一些已经知道其他编程语言的程序员。但是,这可能并不总是正确的!
Dipan Mehta'3

1
我还要补充一点,编程语言是与此类基本概念(OO范例,Aspect,虚拟机等)并行发展的,每个新概念和新思想只有在掌握了新的编程语言后才会出现-仅保持熟悉度,而从核心更改基础知识!同时-这些新概念和新语言只是由于新的业务问题而出现。1980年代-面向大型软件的OO,1990年处于互联网时代的Java,PHP / ASP以及许多其他用于Web的应用。编程语言的创新也主要是由不连续的市场需求驱动的。
Dipan Mehta'3

1
“模拟现实世界”听起来是结论性的,但是在大多数情况下,这不会发生。本Customer类没有类似的方法eatLunchgoToWork或者sleep,虽然这是客户在做现实世界。本Product类有几种方法,但大多数产品具有完全相同的所有无行为真实的世界。因此,我认为OO模型仅在属性方面(或多或少)与现实世界相对应,而在行为方面则完全不相关。但是您不需要OO具有与实际对象相对应的数据模型。记录类型就是全部。
user281377'3

6

我认为最大的原因是X和Windows等图形用户界面的成功。一个GUI由几个对象组成,这些对象具有自己的行为,OO可以紧密地表示这些行为。

另一方面,基于文本的用户界面(并不试图类似于GUI)通常仅遵循命令响应模式,可以轻松地以过程语言来实现。数十年来,使用过程语言已经实现了业务规则和类似的东西,没有太多问题,而今天仍然有许多面向业务应用程序的OO程序;具有保存数据的愚蠢对象和包含业务规则的无状态对象;第一个可能是程序语言中的记录,第二个可能是程序。


4

我认为OOP是程序代码的自然演进步骤:

  1. 程序代码:告诉机器执行A,然后告诉机器执行B。
  2. OOP:通过定义接口/输入/输出,将过程指令打包为可重用的块。(警告:简化。)

我敢肯定会有一个更广阔的视野的人,但是这似乎是自然的进步,因为它只是允许程序员更快地生成代码:即允许更大的代码重用。

按照这种观点,最大的外部因素是处理器功能成本的降低(与创建典型程序的开发人员的人工成本相比):使用OOP类的计算开销比节省开发人员的时间要少。(CPU费用与程序员费用的这种折衷影响了编程的许多其他方面。)


2

刚开始时就需要进行命令式编程(如果您可以这样称呼)。简单的指令告诉大型机应该如何计算。这些编程语言使用了无条件跳转和其他“非结构化”指令,其中大多数都符合当今的标准。

然后有人提出了用于编程的结构。我们今天知道的for,while,dos和foreach。这是一项巨大的创新,因为现在可以轻松编写和理解流程相对复杂的应用程序。因此,结构化编程诞生了。

然后是其他一些人,他们说您需要在这里和那里重复很多代码,维护它是一场噩梦,因此应该发明一种重用代码的方法。人们想出了一些程序和函数来界定可重用的代码位。这也催生了封装和单一责任原则。

然后,一些学者说功能应该与正在处理的数据紧密结合。然后,他们增加了代码重用和多态性的继承概念,以匹配现实生活中逻辑分类的工作方式。因此,第三代编程语言和OOP诞生了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.