C++ 为什么使用对象编程不被认为是过程性的?

C++ 为什么使用对象编程不被认为是过程性的?,c++,c,oop,C++,C,Oop,即使OOP使用对象和数据封装,代码仍然像过程一样写出。那么,是什么让OOP失去了过程性标签呢?是否只是因为它被认为是“高层次的” 谢谢。面向对象编程不仅仅是封装 多态性是其最强大的功能之一。这只是一个“惯例”问题。当人们说“程序化”时,这意味着它不是OO,反之亦然 它永远不会丢失程序标签。这是一个错误的概念。OOP不仅仅是封装和对象。点击查看更多信息。来自Wiki(详细说明): 过程编程的重点是 将编程任务分解为 变量、数据的集合 结构和子例程,而 在面向对象编程中,它是 将编程任务分解为 对象

即使OOP使用对象和数据封装,代码仍然像过程一样写出。那么,是什么让OOP失去了过程性标签呢?是否只是因为它被认为是“高层次的”


谢谢。

面向对象编程不仅仅是封装


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

这只是一个“惯例”问题。当人们说“程序化”时,这意味着它不是OO,反之亦然

它永远不会丢失程序标签。这是一个错误的概念。OOP不仅仅是封装和对象。点击查看更多信息。

来自Wiki(详细说明):

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


可以找到更多信息。

OOP不会丢失程序标签。是OOP扩展了过程编程。C++和Objic C是C语言的OO扩展。函数编程通常是声明式的,相反的是命令式。

< P>不是面向对象编程是“非程序化”的;只是我们称之为“过程性”的代码不是面向对象的(也不是功能性的,可能不是其他几个)

与其说是非此即彼,不如说是缓慢的渐变:

意大利面条代码->结构化代码->面向对象代码->组件代码


(更新:从上面的图表中删除了“过程”,因为它指的是它的所有正确的3/4关系)

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

我想说,面向对象和过程是正交的概念。许多流行的面向对象系统是过程语言的扩展,但不是全部。例如,读起来像是函数式编程和面向对象编程的混合体。

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

取决于您对“面向对象”的定义

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

维基百科上的文章对面向对象编程和过程编程之间的区别提供了一个合理的解释,但简而言之,面向对象编程是关于协作对象之间的消息交换,而不是将过程串在一起以在松散的数据结构上进行操作


在内部,对象确实类似于小程序,但它们的数据不会公开,也不会被其他对象操作。“告诉,不要问原则”是一个面向对象的设计原则,描述了对象之间的这种交互。对这一原则的研究可能有助于进一步阐明面向对象设计的本质和意图,而不是程序设计。

我从来没有听说过OOP根本不是程序设计。你从哪里得到这个想法的?@p4b10:我认为面向对象可以应用于任何其他范式,区别在于函数的哪些参数是隐式的,哪些不是。你不能总是相信你在维基百科上读到的第一件事。这是程序性的。在这方面有很多不同的观点……考虑到代码的性质,阅读这本书非常有趣。谢谢,我以前用过这本书……但是,这是如何使它成为非程序性的。James Curran回答你,“面向对象编程将两者捆绑在一起,这样一个“对象”就可以“自己”运行“数据结构”。这种解释对我来说很有意义。但我一直认为“对象”是指针指向的对象,“面向对象”是一种专注于这些对象而不是函数或过程的范例。因此,OO中的函数和过程(“方法”)有一个隐式参数(它们被称为对象)。您的“图表”看起来似乎暗示了过程代码不如面向对象代码。无论如何:您将函数代码和泛型代码放在何处:)?您需要更多的维度来准确地绘制这方面的任何内容(很像可怕的左-右政治“光谱”)。不过,我认为这是一个相当不错的抽象层次的草图。我个人并没有将其解释为“更好/更糟”。@Andrew:OO的主要概念是数据和操作数据的方法在概念上捆绑在一个单元(一个“对象”)中。您的描述主要涉及重要的