面向过程和面向对象的区别
所谓面向过程,就是将一个具体问题,按照时序的先后顺序,一步一步的完成。
所谓面向对象,就是将一个具体的问题,按照问题空间,划分成不同的小问题空间,层级划分下去,最后再在最小粒度的问题空间里,运用面向过程的思想解决各自的问题。
区别:
面向对象中各个小问题空间使用到的数据,是与其他空间没有必然的关联关系的,也就是说,一个问题空间里的问题不需要使用到另一个问题空间里的数据。而整个问题的解决,是通过客户端程序,将它们按照一定的顺序组合起来,这个是面向过程的思想。
面向过程中,各个函数按照一定的顺序调用,函数与函数间是有紧密的联系的,下一个函数的使用需要调用上一个函数处理过的数据。这样就造成了系统非常紧密的耦合,当有新的功能需要扩展,就需要更改很多地方的代码,系统越大,就越难修改和重构,甚至导致系统的崩溃。
例子:
五子棋,面向过程的设计思路就是首先分析问题的步骤:
1、开始游戏, 2、黑子先走, 3、绘制画面, 4、判断输赢, 5、轮到白子, 6、绘制画面, 7、判断输赢, 8、返回步骤2, 9、输出最后结果。
把上面每个步骤用分别的函数来实现,问题就解决了。
而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为:
1、黑白双方,这两方的行为是一模一样的,
2、棋盘系统,负责绘制画面,
3、规则系统,负责判定诸如犯规、输赢等。
主要的区别就是,
面向过程的每一个点都是紧密联系的,比如4必须在3前面调用,才能正确的完成功能。
而面向对象的每一个点保持相对的独立,比如只要给相应的条件,3可以在任何时间地点正确完成它的功能。