Language agnostic 面向对象编程开发背后的思想是什么?

Language agnostic 面向对象编程开发背后的思想是什么?,language-agnostic,oop,history,Language Agnostic,Oop,History,我手头上有一些真正的反对者,我正试图给他们解释OOP最初开发的原因。我意识到OOP并不适合所有的问题和情况,但它的开发是有原因的 我的猜测是,其中的一些原因是: 维修性 可重用性 文档能力 复杂技术的抽象 运行时的动态扩展 也许有些事情我还没意识到 但我真的没有太多的证据来支持这一点,我想知道为什么OOP首先被开发出来,它已经成为历史了 开发OOP的人试图实现什么?是什么促使他们开发OOP?我一直认为,面向对象编程的产生是为了让我们能够以人类能够理解的方式思考复杂的问题: 世界上的一切都是一

我手头上有一些真正的反对者,我正试图给他们解释OOP最初开发的原因。我意识到OOP并不适合所有的问题和情况,但它的开发是有原因的

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

  • 维修性
  • 可重用性
  • 文档能力
  • 复杂技术的抽象
  • 运行时的动态扩展
  • 也许有些事情我还没意识到
但我真的没有太多的证据来支持这一点,我想知道为什么OOP首先被开发出来,它已经成为历史了


开发OOP的人试图实现什么?是什么促使他们开发OOP?

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


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

你可以参与辩论的一个原因是,OOP使用类、函数和属性来抽象定义具体概念和对象,从而帮助对现实世界建模。有人可能会说,OOP希望帮助开发人员根据构成特定问题空间的现实世界进程和对象对代码进行建模。

Bertrand Meyer(被广泛认为是面向对象编程的基础文本)是一本很好的书。从维基百科页面:

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


Paul Graham列出了人们喜欢OOP的原因:


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

  • 我们自然而然地用对象/事物来思考
  • 对象很适合捕捉/模拟现实
  • 对象可以在整个开发过程中统一使用(需求、分析、实现)
这是否真的是真的是另一个问题。看

OOP的本质是

  • 对象=身份+数据+行为
OOP语言提供的确切功能是什么也是另一个问题。看


PS:许多所谓的面向对象代码实际上是伪装成面向对象代码的过程代码。我们所知道的OOP的主要问题是,当一项职责不能简单地分配给一个对象时,需要经验来捕获对象之间的协作

抛开理论不谈,真正推动OOPS采用的是基于Windows的GUI的出现

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

当Pascal是默认语言时,你必须处理自己的主事件循环,当窗口位于前面的窗口所覆盖的背景中时,通过矩形重新绘制窗口。因此,即使是最简单的程序,也有大量与基本基础设施相关的内容,保持界面干净并不是一件小事,这样代码就不会陷入混乱的意大利面条中。Windows(阅读早期Charles Petzold的任何一本“编程Windows”书籍)和当时各种其他GUI也是如此


OOP的采用大大简化了这一点,因为OOP自然适合GUI。现在,我们认为这是显而易见的和自然的,但并不总是如此,当然,OOP的采用在当时被视为程序员的一个重大挑战。然而,结果是,自90年代末以来,所有新的程序员都是在OOPs环境中成长起来的,因为处理GUI确实需要OOPs,其结果是,OOPs几乎是默认的编码方式,因此它的使用范围已广泛扩展到接口之外

创造了“面向对象编程”这个术语的Alan Kay曾在一些场合使用过


从本质上说,他是从生物学中得到这个想法的——每个细胞都是一个独立的实体,只通过“信息”与其他细胞相互作用,而对其他细胞的实际工作方式一无所知,所有这些自主实体加起来就是一个活的有机体。他认为,这种划分责任的方式,让许多实体自己照顾自己,只通过发送信息进行沟通,将使项目更容易组织起来。他还说,他认为万维网是这种模式的延伸。

这是一个很好的社区维基问题。你查过维基百科和谷歌吗?大部分信息已经在那里了。嗨,leeand00。如果愿意,请编辑此问题,并选中“社区Wiki”复选框。不是特别直观,但这表明它是一个讨论问题,而不是一个技术问题。除非你这样做,否则有些人会投票结束这个问题。+1好问题,请阅读维基百科的文章,但它没有给出具体的答案(如果有)。你打算链接到f吗