谈到面向对象逃不掉的一个问题就是面向对象和面向过程的区别和联系:
从时间的线性角度来说,面向对象是面向过程的下一个发展阶段,从二者的逻辑角度来说,则并没有纯粹的优劣,而是需要编码者根据特定的情况来选择特定的方式。
从代码的发展的角度来看,随着代码量的逐渐扩大,必然会遇到几个问题:1.代码复用问题,2.问题排查的成本问题,本质就是:如何让写代码更加的便捷,减少编程人员的负担,降低解决问题的难度,迎合大脑解决问题的方式,迎合人类的天性。
进而引出了一个必然的问题就是模块化问题,将问题拆分再聚合几乎是大脑解决问题的核心思路。所以如何模块化,模块和模块之间如何联系是工程学研究的核心内容之一。
在将代码模块化的过程中,会触及两个核心情况:耦合和内聚,即如何适度处理模块和模块之间联系的复杂度?如何适度处理单个模块的功能含量?
为了处理耦合和内聚难以适度导致的问题,体现的表象就是面向过程和面向对象的编程思维的不同。
从代码的横向的角度来看程序的核心是两个内容:数据+算法,那么面向过程就是先考虑算法,将问题的解决过程模块化,然后考虑数据的组织形式
从代码纵向的角度来说面向过程就是将问题解决的每一个步骤进行模块化。
以上是面向过程,下面给出对面向对象的个人理解,横向上,面向对象优先将数据模块化为对象,纵向上通过对象和对象相互作用取代过程和过程相互作用,本质上是将一个整体的过程中的某个行为微化成了一个对象的**方法,**然后再由coder 将这些过程组织成问题的解决步骤。
这样从数据的角度出发去编码,会使得编码更加方便:如在问题排查的过程中,实际的编码过程中,错误体现的都是某个数据结果错误或者程序行为的错误。而因为面向对象的编码方式过程微化程度更高,进而使得DBUG更为容易。
面向过程的组织方式:
面向对象的组织方式:
最后要说的是,面向对象和面向过程没有绝对的优劣,适用的场景不同,可以体现出不同的能力。
本篇关键词:模块化,优先考虑方式,微化程度