即使OOP使用对象和数据封装,代码仍然像过程一样写出来。那么是什么让OOP松散了程序标签?是因为它被认为是“高级别”吗?
谢谢。
答案 0 :(得分:10)
并非面向对象编程是“非程序性的”;只是我们称之为“程序”的代码不是面向对象的(并且不是功能性的,可能不是其他几个)
这不是一个或两个案例,而是一个缓慢的渐变:
意大利面条代码 - >结构化代码 - >面向对象的代码 - >组件代码。
(更新:从上面的图表中删除了“程序”,因为它引用了它的所有正确的3/4)
答案 1 :(得分:7)
理论上,OOP和程序编程是正交概念。他们在实践中交织在一起的事实可能比其他任何事情更巧合。因为它非常熟悉,所以程序语法是最易读的格式。消息传递,功能计算表达式和各种其他格式 - 由于它们不熟悉 - 对于大多数程序员来说并不容易。将此与大多数OOP系统基于过程语言的扩展这一事实相结合,并且在实际上难以将这两种范例分开。 (作为旁注:这是我喜欢F#的一个方面;作为一种多范式语言,它有助于在概念上将OOP的各个方面,命令式编程,函数式编程分开,同时使所有这些方面都可用。)
答案 2 :(得分:5)
我认为面向对象和程序是正交概念。许多流行的面向对象系统是过程语言的扩展,但不是全部。例如,Dylan读起来就像功能和面向对象编程的混合。
答案 3 :(得分:4)
这只是一个“约定”的事情。当人们说“程序性”时,暗示它不是OO,反之亦然。
答案 4 :(得分:4)
OOP不会丢失程序标签。 Procedural programming是imperative programming。 OOP扩展了程序编程。 C ++和Objective C是C语言的OO扩展。函数式编程通常是声明性的 - 与命令式相反。
答案 5 :(得分:3)
来自Wiki(很好解释):
程序编程的重点是 把编程任务分解成 变量,数据的集合 结构和子程序,而 在面向对象的编程中它是 把编程任务分解成 每个“对象”的对象 封装自己的数据和方法 (子程序)。最重要的 区别是程序性的 编程使用程序来操作 数据结构,面向对象 编程将两者捆绑在一起 所以“对象”在其“自己的”上运作 数据结构。
可以找到更多here。
答案 6 :(得分:2)
@ {3}}上的维基百科文章对面向对象编程和过程编程之间的差异提供了一个不错的解释,但简而言之,面向对象编程是关于协作对象之间的消息交换而不是将过程串联在一起对松散的数据结构进行操作。
在内部,对象确实类似于小程序程序,但是它们的数据不会被其他对象公开暴露和操作。 “Tell,Do not Ask principle”是一种面向对象的设计原则,它描述了对象之间的这种交互。对这一原则的研究可能有助于进一步阐明面向对象设计相对于程序设计的本质和意图。
答案 7 :(得分:1)
它永远不会丢失程序标签。这是一个误解。 OOP不仅仅是封装和对象。点击here了解详情。
答案 8 :(得分:1)
我认为其中一个区别是虚拟属性和方法在面向对象语言中的使用比C语言中的函数指针要多得多。在C中,如果我说foo(x),我很清楚我正在做两件事之一,而foo(x)的声明会告诉我哪一件。我正在调用一个名为foo()的函数,或者我正在调用一个名为foo()的函数指针指向的函数。在面向对象的语言中,当我编写foo(x)时,可能会隐式映射到调用我的模块编译时甚至不存在的代码。
答案 9 :(得分:1)
取决于您对“定向”的定义。
如果51%的代码是O-O,它是否符合条件?
答案 10 :(得分:0)
OOP不仅仅是封装。
多态性是其最强大的功能之一。