当前位置:  开发笔记 > 编程语言 > 正文

程序性程序和面向对象程序之间有什么区别?

如何解决《程序性程序和面向对象程序之间有什么区别?》经验,为你挑选了8个好方法。

我对编程很新,但我一直在阅读StackOverflow关于各种编程方法的一些有趣的讨论.我还不是100%清楚程序编程和面向对象编程之间的区别.听起来像面向对象的编程仍然使用过程(方法),但所有内容的组织方式都不同,因为对象是节目的明星.但在我看来,程序仍然允许你做所有相同的事情.与在C中一样,您可以将所有类似的过程放入库中.你真的不能说C中的库类似于C++中的对象吗?



1> paxdiablo..:

在程序程序中,代码为王,数据为从属.换句话说,您拥有对数据起作用的程序,而且它们通常不会紧密绑定.

在面向对象世界中,对象是主要的兴趣点.对象由数据允许对该数据起作用的代码组成,并且它们受到非常严格的约束.它是封装的概念,隐藏信息.

举个例子,假设您有一个数字,并且想要加倍.这样做的程序方法是:

n = n * 2

这里的代码非常明确地将n乘以2并将结果存储回n.

这样做的OO方式是向数字对象发送"消息",告诉它自己加倍:

n.double();

这种优势称为多态性.当您决定要将"bob"这样的字符串加倍时会发生什么.在程序世界中,您必须提供更多代码来进行加倍,但您还必须以不同方式调用该代码.

使用OO,您可以创建一个字符串对象,该对象也可以采用"双重"消息.将字符串加倍的代码属于字符串对象,因此它知道它必须对数字对象采取不同的行为.如果它决定"bob"*2是"bobbob",代码看起来像:

class number:                    class string:
    int n                           char array s
    procedure double:               procedure double:
        n = n * 2                       s = string_join(s,s)

然后你可以调用x.double(),无论实际的x是什么类型(数字或字符串),它都知道要运行哪些代码 - 这大大简化了你的代码.您可以在监视器上添加整数,字符串,矩阵,复数,实数,窗口大小以及各种不同的东西.

你是对的,可以让C库看起来有点像对象.经典的例子是stdio.h- 你从不关心实际指向的是什么FILE*,只是它会以某种方式表现出来.的FILE*,fopen(),fclose()和其他功能是代表C的I/O能力的类各种



2> Aram Versteg..:

您可以在大多数OO语言中以程序方式编程,但OO的强大功能来自于继承,封装和抽象该过程逻辑的能力.我认为你是对的,图书馆应该看起来很像一个类.它应该有自己的范围,并在具有有意义名称的函数后面封装逻辑.


为了补充你的答案,继承,封装和多态是OOP的三大支柱.

3> Uri..:

你的观察是正确的,面向对象的程序在很多方面都基于程序范式.你在句法上也是正确的,所有真正发生的事情都是你调用函数.实际上,您可以使用过程机制(例如,C++中的函数指针)实现面向对象语言的许多功能.因此,您可以进行面向对象的设计,并仍然使用过程语言实现它(例如,像旧的C++编译器那样).

面向对象范式的重要性在语言机制中并不像在思考和设计过程中那么重要.在程序编程中,思考是关于操作并使用其他操作将这些操作分解,将它们分组为模块等.这意味着数据或状态属于次要重要性.这就像思考数学运算一样.

另一方面,面向对象的范例表明,您需要将状态和操作一起视为一个实体,然后将程序设计为交换状态和激活操作的实体之间的交互.



4> Serx..:

两者之间的差异是微妙但重要的.

在过程程序中,模块通过读取和写入存储在共享数据结构中的状态进行交互.

在面向对象的程序中,对象形式的模块通过向其他对象发送消息来进行交互.



5> dsimcha..:

恕我直言,面向对象编程是一种概念,存在于比程序编程更高的抽象层次.这两者并不相互排斥,因为OO程序中的各个方法看起来与程序程序中的各个函数几乎相同.这与例如功能编程形成对比,后者需要完全不同的思维模式.此外,您可以通过使所有内容静态等在OO语言中编写程序.您可以成为人工编译器,并通过使用大量函数指针和结构指针转换在C中有效地编写OO代码.

因此,OO更像是一种设计哲学和世界观,而不是具有严格定义的东西.它要求在构造代码时使用继承,多态等作为主要模式,并且提供语法以使这些可以表达而不诉诸低级技巧.它要求您将作为数据集合状态的代码视为数据的属性,而不是单独存在的过程.它不是黑色和白色.您的代码可以是"更多"或"更少"OO,具体取决于您依赖继承,多态,类和"作为数据属性的方法"世界观的程度,作为构建和解释/理解代码的方法.



6> hasen..:

OO主要是心态.你可以在C中编写OO(如果你真的想...),你可以完全拥有C++/Java中的过程代码; 我的意思是,即使你在表面使用类,它仍然可以是程序性的.

OO背后的想法是对国家的抽象.您不是"思考""数据分组",而是"思考""对象",其中对象是"数据分组和操作此数据的方法"的"接口".

这听起来很哲学,因为它是.

这里有很多话要说,并且不能在一篇小SO帖子中说出来,所以我会留在这里.

更新
正如Flanagan的回答中所提到的,OO语言实现了利用这种抽象的构造.

我的意思是,从技术上讲,你可以在结构,函数和函数指针方面"破解"类和多态.

这是C中OO的一个例子



7> vanja...:

不同之处在于,对象在同一位置具有过程和相关数据 - 过程语言使用"结构"(将相关数据保存在一起的东西),这使得数据与过程分离.实际上,你在OO语言中所做的任何事情都应该是一种程序性语言,结合了结构和程序.

主要区别在于OO语言让程序员进入的思维模式.



8> Steven A. Lo..:

[原谅引子风格,已经很晚了,我累了]

程序处理数据 - 数据输入,应用一些处理,获取数据

有时,一些数据元素与一些其他数据元素相关,并且将它们组合成数据结构很方便,然后可以将其作为单个单元进行操作和寻址.

现在我们的程序可以将数据结构作为输入并改变它和/或产生另一个数据结构作为输出

我们偶尔会注意到某些程序只涉及某种数据结构; 将这些过程与其数据结构一起分组是很方便的,并将其称为对象.

用于创建对象的模板称为 ; 一个对象被认为是一个类的实例

我们可能会注意到一个类与另一个类非常相似,因此我们不是复制和粘贴代码,而是让一个类继承自另一个:子类继承自超类或"基类".通过这种方式,子类可以访问超类的所有数据结构和过程,并且可以以某种方式扩充或覆盖它们

如果我们礼貌地请求一个对象为我们做某事而不是直接粗暴地调用它的程序,这就叫做消息传递,即使没有传输实际的"消息".这里的喜悦是许多不同类型的对象可以理解同一个消息,这导致了多态性的概念.例如,我们可以要求许多不同类型的文档进行打印,并且每个文档都会做出适当的响应.

通过消息传递和继承支持对象(通过类或不通过类)的语言称为面向对象.如果没有继承,则该语言仅基于对象.

祝你学习顺利!


这太棒了!无法想象如果你没有厌倦会是什么样的.我正在保存这个.
哇!我希望我的老师能够像你在这里一样清楚地解释一些事情.谢谢你的贡献!
推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有