面向对象编程的开发思路是什么?

8
我手头上有一些真正的否定者,我正在试图给他们一个理由,说明为什么首先开发了面向对象编程。我知道面向对象编程并不适用于所有问题和情况,但它确实是有原因而被开发出来的...
我的猜测是,其中一些原因可能是:
- 可维护性 - 可重用性 - 可文档化性 - 抽象复杂技术 - 在运行时进行动态扩展... - 也许还有一些我还不知道的东西...
但我真的没有太多证据来支持这一点,我想知道为什么首先开发了面向对象编程以及它的历史。
开发面向对象编程的人试图实现什么?是什么导致他们开发了面向对象编程?

2
这个问题应该适合作为社区维基问题。 - Adam Crossland
3
你是否查过维基百科和谷歌?大部分内容都已经在那里了。 - Adam Crossland
1
嗨,leeand00。如果可以的话,请编辑这个问题,并勾选“社区维基”复选框。虽然不是特别直观,但这将把它标记为讨论问题而不是技术问题。除非你这样做,否则有些人会投票关闭这个问题。 - Patrick Karcher
很好的问题,我刚才阅读了维基百科文章,但是它没有给出一个具体的答案(如果有的话)。 - helpermethod
7个回答

3

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

世界上的所有事物都是对象,对象具有属性,某些对象甚至可以执行操作(或接受操作)。


2

阿兰·凯(Alan Kay)是“面向对象编程”一词的创造者,他在多个场合解释了他的思想。

基本上,他从生物学中得到了这个想法——每个细胞都是一个自包含的实体,只通过“消息”与其他细胞交互,而不知道另一个细胞的工作方式,所有这些自治实体汇聚成一个生物体。他认为,通过这种方式划分责任,许多实体可以照顾自己,并且只通过发送消息进行通信,这将使程序更易于组织。他还表示,他将万维网视为这种模型的延伸。


我喜欢这个答案!:-D 自然会知道最好的方法。 - leeand00

1

你可以参与这场辩论的原因之一是,面向对象编程(OOP)使用类、函数和属性来定义具体概念和抽象对象,有助于模拟现实世界。可以说,OOP旨在帮助开发人员将代码建模为特定问题空间中构成过程和对象的现实世界。


1

这方面的好书是Bertrand Meyer的Object-Oriented Software Construction(被广泛认为是面向对象编程的基础文本)。根据维基百科页面:

这本书,被粉丝们称为“OOSC”,将对象技术作为解决软件工程主要问题的答案,特别强调解决正确性、健壮性、可扩展性和可重用性等软件质量因素。它从软件质量问题的考察开始,然后介绍抽象数据类型作为对象技术的理论基础,并继续介绍主要的面向对象技术:类、对象、泛型、继承、按合同设计、并发和持久性。它包括了对方法论问题的广泛讨论。


你是不是想链接到以下页面?http://en.wikipedia.org/wiki/Object-Oriented_Software_Construction - stakx - no longer contributing

1

2
说实话,这听起来不像是“人们喜欢面向对象编程的原因列表”,更像是“我认为面向对象编程程序员糟糕的原因列表”。总是很有趣看到人们贬低其他类型的语言或程序员,而不是试图推销自己喜欢的东西。 - Lasse V. Karlsen

1
理论方面不谈,真正推动OOPS的采用是基于Windows图形用户界面的到来。
如果你只是编写DOS或主机终端应用程序,那么你真的不需要OOP,当然它可能有用,但没有强制性的理由去采用它。然而,一旦你开始为任何基于WIMP的GUI编码,没有OOP很难有效地处理它,特别是一旦你超越了一个简单的系统。
我在Pascal是默认语言的Mac上编写代码时入门,你必须处理自己的主事件循环,并做一些事情,比如遍历矩形以在后台被前面的窗口覆盖时重新绘制窗口。因此,即使是最简单的程序也涉及大量基础设施,保持接口清洁,使代码不会陷入混乱的意义重大,这不是一项微不足道的任务。同样适用于Windows(阅读早期的Charles Petzold“编程Windows”书籍之一)和当时各种其他GUI。
面向对象编程(OOP)的采用极大地简化了GUI的实现。现在我们认为这是显而易见和自然的,但过去并非如此,当时OOP的采用被视为程序员的一项重大挑战。然而,结果是自90年代末以来所有新的程序员都成长于OOP,因为它确实需要处理GUI,因此它几乎成为编码的默认方式,并且其使用已经广泛扩展到界面之外。

0

我认为最初推动面向对象编程的原因是以下事实(或者说假设):

  • 我们自然而然地以对象/事物的方式思考
  • 对象很好地捕捉/模拟现实
  • 对象可以在整个开发过程中(需求、分析、实现)统一使用

这是否真的正确是另一个问题。请参见我们是否以对象为中心思考

面向对象编程的本质是

  • 对象=身份+数据+行为

面向对象编程语言提供的确切功能是另一个问题。请参见维基百科页面

附:许多所谓的面向对象代码实际上是伪装成面向对象代码的过程式代码。我们目前所知道的面向对象编程的主要问题是,当一个责任不能轻易地分配给一个对象时,需要经验来捕捉对象之间的协作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接