设计一个象棋:面向过程的思路就是首先分析问题的步骤:
1.开始游戏;
2.黑子先走;
3.绘制棋盘画面;
4.判断输赢;
5.白子走;
6.绘制棋盘;
7.判断输赢;
8.返回到步骤2;
9.输出最后的结果;
就这样一步步的实现,问题就解决了;
而面向对象则是从另外一个思路来设计解决问题:
1.玩家系统:黑白ABCD都是玩家,所以属性,步骤功能一样;
2.绘制棋盘系统;
3.规则系统:决定哪个先走,判断输赢等操作;
可以看出面向对象是以功能来划分,而不是步骤,黑子落棋后通知白棋棋盘发生变化,绘制棋盘系统就开始把变化绘制出来,规则系统则判定结果;赢了则返回,否则由白字继续走;
如果要加一个悔棋功能,面向过程则需要改动很多地方,黑子撤回棋,棋盘变化,然后载绘制,再判断,可能很多要变化;随着功能的越来越多,系统无法应付功能需求的规则的复杂而膨胀,最终导致奔溃;但是面向对象只需要得到悔棋命令后,绘制棋盘系统将棋盘重新绘制,调用规则系统判定即可,减少了大的改动;保证了面向对象程序的可扩展性;
来源——作者:帝龙天链接:https://www.zhihu.com/question/19701980/answer/381970157
2.面向对象: 狗.吃(屎)
面向过程: 吃.(狗,屎)
3.面向过程是一件事“该怎么做“,面向对象是一件事“该让谁来做”,然后那个“谁”就是对象,他要怎么做是他自己的事,反正最后一群对象合力能把事做好就行了。
4.我认为最主要的区别在于控制执行流数据的传递方式不同
面向过程的方式通常是通过参数或者全局变量来控制执行流
面向对象的方式通常是通过方法所属的对象来传递的
这样以来,就导致了面向过程编程方式暴露了更多的程序细节
从某种程度上说,也更松耦合
也正是这样的区别导致了多核兴起的时候,面向对象的式微
因为面向对象这种编程方式不适合多核多线程
面向对象更适合的方面在于那些需要对数据有较强控制的环境
作者:张小鱼
链接:https://www.zhihu.com/question/19701980/answer/12700519
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
5.面向过程,自己造电脑。面向对象,自己组装电脑。
6.面向对象是把世界描绘成N个有主动性的“活物”之间的交互
面向过程是有一个“上帝之手”通过制定一系列规则来操纵一堆“死物”