面向对象与面向过程的区别

学习C++一般都会思考这个问题,c++里的++到底比C语言多了什么东西,有什么不一样呢??

首先一个问题就是类与对象,那么我们就必须要理解面向对象和面向过程的区别,经过查阅资料以及网上很多大神们的讲解,我小小总结一下,我喜欢用实例来讲解,所以比较的时候多以实例为主:

1.面向对象和面向过程的区别:

面向过程:procedure oriented programming POP
面向对象:object oriented programming OOP


个人理解:一个博大,一个精深;一个是面向运行阶段,一个是面向编译阶段:
博大:面向对象的博大,将某一类事物的共同属性进行抽象,将其所有的属性,行为按功能集合;
精深:面向过程,思考到事物发展的每一步,细如发丝,考虑到任何一种可能发生的情况,一步步的执行,判断,直至事物的结束(深邃);
面向过程:就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步的实现,使用的时候一个个调用就可以了;
面向对象:是把事物分解成不同的对象,建立对象的目的不是完成某一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为;


艾兰.库伯的《软件创新之路》中提到:

面向过程和面向对象的区别并不像人们想象得那么大,面向对象的大部分思想在面向过程中也能体现
面向过程最大的问题(也许是唯一先天的缺陷)在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃
面向对象的提出正是试图解决这一软件危机

目前看来,似乎有一定成效
但仍任重道远


例如设计一个象棋:面向过程的思路就是首先分析问题的步骤:
1.开始游戏;
2.黑子先走;
3.绘制棋盘画面;
4.判断输赢;
5.白子走;
6.绘制棋盘;
7.判断输赢;
8.返回到步骤2;
9.输出最后的结果;
就这样一步步的实现,问题就解决了;


而面向对象则是从另外一个思路来设计解决问题:
1.玩家系统:黑白ABCD都是玩家,所以属性,步骤功能一样;
2.绘制棋盘系统;
3.规则系统:决定哪个先走,判断输赢等操作;
可以看出面向对象是以功能来划分,而不是步骤,黑子落棋后通知白棋棋盘发生变化,绘制棋盘系统就开始把变化绘制出来,规则系统则判定结果;赢了则返回,否则由白字继续走;


如果要加一个悔棋功能,面向过程则需要改动很多地方,黑子撤回棋,棋盘变化,然后载绘制,再判断,可能很多要变化;随着功能的越来越多,系统无法应付功能需求的规则的复杂而膨胀,最终导致奔溃;但是面向对象只需要得到悔棋命令后,绘制棋盘系统将棋盘重新绘制,调用规则系统判定即可,减少了大的改动;保证了面向对象程序的可扩展性;


又如汽车:
面向过程:
1.打开车门,关车门,插入钥匙点火,踩离合挂一档,松手刹,慢抬离合给油门,打方向。。。这样车才会行驶,每个步骤都是一个函数,函数的调用顺序就决定了程序运行的顺序;前面是宝马,再来一辆奔驰,又要来一遍,写很多,如果中途要放个歌曲,又的在某个位置加上一个函数,修改程序;最重要的是函数;
面向对象:
则是以汽车为对象,上面一系列的功能都是汽车有的,要做什么事儿,告诉汽车就行了;来辆奔驰,创建个奔驰对象,改变一个车型,告诉汽车怎么做,就可以了,不用一步步的用函数实现了;
但是面向对象也是一个个过程组合起来的,具有封装性;所以它需要很大的空间;


当然,要达到局部改动就可以完成功能而不影响大局的编程需要经验机器丰富的编程人员,设计分块合理,使用对象不能保证你的程序就是面向对象的,初学者很多程序员可能以面向对象之虚而行面向过程之实。这样设计出的程序的可移植性和扩展性就有一定的问题;

例如:对人这类这种高级动物:
如果面向对象:你只需要吃饭,跑步,睡觉几个命令即可;
面向过程:做饭,拿筷子,夹菜,夹饭,嚼,咽、、、一步步的写相应的函数,一个一个调用实现功能;顺序的向下做;
但是:对象是由一个个过程组合起来的;具有封装性;稍微重要的说两遍!因为他们并不是完全独立的!没有关系!




  • 27
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值