2010-07-15 82 views
11

尽管OOP使用对象和数据封装,但代码仍然像过程一样写出来。那么是什么让OOP松动了程序标签?仅仅因为它被认为是“高级”?为什么用对象编程不被认为是程序性的?

谢谢。

+3

我从来没有听说过OOP根本不是程序性的。你从哪里得到这个想法? – p4bl0 2010-07-15 16:34:28

+0

@ p4b10:http://en.wikipedia.org/wiki/Procedural_programming#Comparison_with_object-oriented_programming – 2010-07-15 16:38:57

+1

我认为面向对象可以应用于任何其他范例,区别在于函数的哪些参数是隐式的,哪些不是。 – 2010-07-15 16:47:25

回答

10

这并不是说面向对象编程是“非程序性的”;它只是在代码中,我们称之为“程序”是不是面向对象(而不是功能,可能不是一人)

这与其说是一个非此即彼的情况下,但慢gradiate:

面条代码 - >结构化代码 - >面向对象代码 - >组件代码。

(UPDATE:删除“程序”从图表如上所述,由于它是指所有的它的右侧3/4rds的)

+1

这个解释对我很有意义。但后来我一直认为“对象”是指针指向的东西,“面向对象”是一种聚焦于这些对象而不是功能或过程的范式。因此OO中的函数和过程(“方法”)有一个隐式参数(它们被称为的对象)。 – 2010-07-15 16:49:38

+3

这里的“图表”看起来像某种程度上意味着程序代码不如面向对象的代码。无论如何:你在哪里抛出函数代码和通用代码:)? – 2010-07-15 17:15:09

+2

您需要更多维度来精确绘制这方面的任何内容(很像可怕的左右政治“光谱”)。尽管如此,我认为这是相当抽象层次的足够体面的素描。我没有亲自把它解释为“更好/更糟糕”。 – Cogwheel 2010-07-15 17:30:35

0

OOP不仅仅是封装。

多态性是其最强大的功能之一。

+0

谢谢,我之前使用过......但是,这是如何使它成为非程序性的。 – 2010-07-15 16:35:46

+2

James Curran正在回答你: – 2010-07-15 18:28:50

4

这只是一个'约定'的事情。当人们说'程序性'时,这意味着它不是面向对象,反之亦然。

1

它从不失去程序标签。它是一个错误的概念。 OOP不仅仅是封装和对象。点击here了解更多信息。

3

从维基(很好的解释):

过程编程的重点是 到编程任务分解成 的变量的集合,数据 结构,和子程序,而在面向对象 编程它是 打破编程任务到 对象与每个“对象” 封装自己的数据和方法 (子例程)。最重要的区别 是而程序 编程使用程序,以对数据结构进行操作 ,面向对象的编程 捆绑两个一起 所以“对象”在其“自己的” 数据结构进行操作。

更多可以找到here

+0

“面向对象的程序设计将两者捆绑在一起,因此”对象“在其”自己“的数据结构上运行。” < - 现在,这听起来更高级别,但似乎是“最重要的区别”? – 2010-07-15 16:44:51

7

在理论上OOP和过程编程是正交的概念。他们在实践中交织在一起的事实可能比其他任何事情都更巧合。由于它非常熟悉,程序语法是人类可读性最高的格式。消息传递,函数计算表达式以及其他各种格式 - 因为他们不熟悉 - 对于大多数程序员来说并不容易。再加上大多数面向对象系统基于对过程语言的扩展这一事实,将这两种范式分开实际上很难实现。(作为一个方面说明:这是我喜欢的关于F#的东西之一;作为一种多范式语言,它有助于从概念上分离OOP的各个方面,命令式编程,函数式编程,同时使它们全都可用。)

+0

+1对于“大多数OOP系统都基于程序语言的扩展” – 2010-08-10 18:47:24

5

我会说面向对象和程序是正交的概念。许多流行的面向对象系统是过程语言的扩展,但并非全部。例如,Dylan就像功能和面向对象编程的混合。

1

我认为其中的一个区别就是虚拟属性和方法在面向对象的语言中比在像C语言中的函数指针中使用得多得多。在C中,如果我说foo(x),那很明显,我正在做两件事情之一,并且foo(x)的声明会告诉我哪一件。我要么调用一个名为foo()的函数,要么调用一个名为foo()的函数指针指向的函数。在面向对象语言中,当我编写foo(x)时,可能会隐式映射到调用编译模块时甚至不存在的代码。

1

取决于您对'定向'的定义。

如果51%的代码是O-O,它是否符合条件?

2

维基百科的文章http://en.wikipedia.org/wiki/Procedural_programming对面向对象编程和过程编程之间的差异提供了一个体面的解释,但简而言之,面向对象编程是关于协作对象之间的消息交换,而不是将过程串在一起进行操作松散的数据结构。

在内部,对象的确很像程序性程序,但是它们的数据并没有公开地被公开地暴露并被其他对象操作。 “告诉,不要求原则”是一种面向对象的设计原则,它描述了对象之间的这种交互。这一原则的研究可能有助于进一步阐明面向对象设计在程序设计上的性质和意图。

+0

非常好,谢谢。 – 2010-07-16 16:13:28

相关问题