回答
这并不是说面向对象编程是“非程序性的”;它只是在代码中,我们称之为“程序”是不是面向对象(而不是功能,可能不是一人)
这与其说是一个非此即彼的情况下,但慢gradiate:
面条代码 - >结构化代码 - >面向对象代码 - >组件代码。
(UPDATE:删除“程序”从图表如上所述,由于它是指所有的它的右侧3/4rds的)
这个解释对我很有意义。但后来我一直认为“对象”是指针指向的东西,“面向对象”是一种聚焦于这些对象而不是功能或过程的范式。因此OO中的函数和过程(“方法”)有一个隐式参数(它们被称为的对象)。 – 2010-07-15 16:49:38
这里的“图表”看起来像某种程度上意味着程序代码不如面向对象的代码。无论如何:你在哪里抛出函数代码和通用代码:)? – 2010-07-15 17:15:09
您需要更多维度来精确绘制这方面的任何内容(很像可怕的左右政治“光谱”)。尽管如此,我认为这是相当抽象层次的足够体面的素描。我没有亲自把它解释为“更好/更糟糕”。 – Cogwheel 2010-07-15 17:30:35
OOP不仅仅是封装。
多态性是其最强大的功能之一。
谢谢,我之前使用过......但是,这是如何使它成为非程序性的。 – 2010-07-15 16:35:46
James Curran正在回答你: – 2010-07-15 18:28:50
这只是一个'约定'的事情。当人们说'程序性'时,这意味着它不是面向对象,反之亦然。
它从不失去程序标签。它是一个错误的概念。 OOP不仅仅是封装和对象。点击here了解更多信息。
从维基(很好的解释):
过程编程的重点是 到编程任务分解成 的变量的集合,数据 结构,和子程序,而在面向对象 编程它是 打破编程任务到 对象与每个“对象” 封装自己的数据和方法 (子例程)。最重要的区别 是而程序 编程使用程序,以对数据结构进行操作 ,面向对象的编程 捆绑两个一起 所以“对象”在其“自己的” 数据结构进行操作。
更多可以找到here。
“面向对象的程序设计将两者捆绑在一起,因此”对象“在其”自己“的数据结构上运行。” < - 现在,这听起来更高级别,但似乎是“最重要的区别”? – 2010-07-15 16:44:51
OOP不会丢失程序标签。 Procedural programming是imperative programming。 OOP扩展了程序编程。 C++和Objective C是C的OO扩展。函数式编程通常是声明式的 - 与命令式相反。
在理论上OOP和过程编程是正交的概念。他们在实践中交织在一起的事实可能比其他任何事情都更巧合。由于它非常熟悉,程序语法是人类可读性最高的格式。消息传递,函数计算表达式以及其他各种格式 - 因为他们不熟悉 - 对于大多数程序员来说并不容易。再加上大多数面向对象系统基于对过程语言的扩展这一事实,将这两种范式分开实际上很难实现。(作为一个方面说明:这是我喜欢的关于F#的东西之一;作为一种多范式语言,它有助于从概念上分离OOP的各个方面,命令式编程,函数式编程,同时使它们全都可用。)
+1对于“大多数OOP系统都基于程序语言的扩展” – 2010-08-10 18:47:24
我会说面向对象和程序是正交的概念。许多流行的面向对象系统是过程语言的扩展,但并非全部。例如,Dylan就像功能和面向对象编程的混合。
我认为其中的一个区别就是虚拟属性和方法在面向对象的语言中比在像C语言中的函数指针中使用得多得多。在C中,如果我说foo(x),那很明显,我正在做两件事情之一,并且foo(x)的声明会告诉我哪一件。我要么调用一个名为foo()的函数,要么调用一个名为foo()的函数指针指向的函数。在面向对象语言中,当我编写foo(x)时,可能会隐式映射到调用编译模块时甚至不存在的代码。
取决于您对'定向'的定义。
如果51%的代码是O-O,它是否符合条件?
维基百科的文章http://en.wikipedia.org/wiki/Procedural_programming对面向对象编程和过程编程之间的差异提供了一个体面的解释,但简而言之,面向对象编程是关于协作对象之间的消息交换,而不是将过程串在一起进行操作松散的数据结构。
在内部,对象的确很像程序性程序,但是它们的数据并没有公开地被公开地暴露并被其他对象操作。 “告诉,不要求原则”是一种面向对象的设计原则,它描述了对象之间的这种交互。这一原则的研究可能有助于进一步阐明面向对象设计在程序设计上的性质和意图。
非常好,谢谢。 – 2010-07-16 16:13:28
- 1. 为什么decimal.Decimal对象不被认为是合理的?
- 2. 为什么C++被称为面向对象的编程语言?
- 3. 为什么OCaml的线程被认为是“不够”?
- 4. 什么被认为是一个单独的ASP.NET应用程序?
- 5. 为什么这个程序的输出不是我认为的
- 6. 为什么多线程环境被认为是有害的?
- 7. 为什么程序不会被杀死?
- 8. 为什么我的Rails应用程序认为我是CSRF?
- 9. 锁定可变对象 - 为什么它被认为是不好的做法?
- 10. 程序为什么编译?
- 11. 什么被认为是C++中的一个小对象?
- 12. 为什么课程被认为是参考类型?
- 13. 什么是iPhone应用程序的最低要求被认为是本地化
- 14. 为什么实例化的对象被视为不是?
- 15. 为什么对象被认为不可迭代,虽然他们实际上是?
- 16. 为什么我对象被
- 17. 为什么程序不能编译?
- 18. 为什么我的对象被另一个线程使用?
- 19. 为什么线程对象在范围之后不被销毁?
- 20. Mac OSX? Linux呢? X?侏儒? KDE?为什么osx被认为是linux,为什么它不被认为是linux?
- 21. 为什么Redis被认为是CP?
- 22. 为什么'\\'被认为是int?
- 23. 为什么我的子类被认为是一个抽象类?
- 24. 使用GNUStep编写Windows应用程序被认为是不好的做法吗?
- 25. 为什么我的程序认为4是一个素数?
- 26. gdb为什么认为我的x86-64程序是i386?
- 27. 面向对象编程与程序编程 - 最大的区别是什么?
- 28. 为什么值'NO'被接受为对象而'YES'不是
- 29. 什么是节点JS对象编程?
- 30. 为什么使用ttinclude而不是编译程序集?
我从来没有听说过OOP根本不是程序性的。你从哪里得到这个想法? – p4bl0 2010-07-15 16:34:28
@ p4b10:http://en.wikipedia.org/wiki/Procedural_programming#Comparison_with_object-oriented_programming – 2010-07-15 16:38:57
我认为面向对象可以应用于任何其他范例,区别在于函数的哪些参数是隐式的,哪些不是。 – 2010-07-15 16:47:25