1. 面向过程
按照业务逻辑和实现过程步骤来逐步垒代码,代码编写的逻辑即对应于实际实现的步骤过程,核心是过程两个字,从代码执行顺序上体现出设计者的逻辑过程,整个程序就是把若干个过程串起来的效果。本质上像是构建了一条生成流水线,每一道工序都通过代码块严格定义。
优点:
复杂问题简单化,把大的任务逐步分解成一个一个小的任务分步实现,实现了每个小的步骤即可完成整体任务。逻辑思想符合日常生活中的常规过程化思维,因而代码可读性较高。
缺点:
由于实现逻辑是自上而下的分步过程,任何一个环节的变动,都可能涉及到后续环节的变动,牵一发而动全身。因此代码的灵活性、可维护性较差:构建的生产面包的流水线,如果原料工艺发生变化,很可能要进行生产线的改造;当然想用它来生产饮料,几乎要推倒重来。
应用场景:
需求相对固化,不会经常变更,容易通过过程化思维顺序体现出来的情况。
2. 函数式编程
函数式编程也是一种面向过程的编程范式,主要变化在于把重要的功能逻辑通过函数进行封装,以便重复调用,同时也提高了代码的维护性。其优点就不赘述了,缺点除了牵一发而动全身外(函数的定义发生变化,至少调用它的每个地方都要随之改变),对于较为复杂的应用场景,遇到多个函数需要传递共同的参数时,你就会觉得写起来真是麻烦又啰嗦。如果要实现一个数据库连接查询修改的程序,数据库的连接参数是共性参数,如果根据数据库增删改查的不同分别定义函数,数据库连接参数就要重复多次,而如果通过一个函数来定义并区分,你还得各种if去判断要执行的sql到底属于哪一种。
总之函数式编程不是万能的,有时候虽然能实现结果,但实现的过程可能比较曲折。
3. 面向对象
核心是对象二字,(要理解对象为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,不存在的也可以创造出来。面向对象的程序设计好比如来设计西游记,如来要解决的问题是把经书传给东土大唐,如来想了想解决这个问题需要四个人:唐僧,沙和尚,猪八戒,孙悟空,每个人都有各自的特征和技能(这就是对象的概念,特征和技能分别对应对象的数据属性和方法属性),然而这并不好玩,于是如来又安排了一群妖魔鬼怪,为了防止师徒四人在取经路上被搞死,又安排了一群神仙保驾护航,这些都是对象。然后取经开始,师徒四人与妖魔鬼怪神仙交互着直到最后取得真经。如来根本不会管师徒四人按照什么流程去取),对象是特征与技能的结合体,基于面向对象设计程序就好比在创造一个世界,你就是这个世界的上帝,存在的皆为对象,不存在的也可以创造出来,与面向过程机械式的思维方式形成鲜明对比,面向对象更加注重对现实世界的模拟,是一种“上帝式”的思维方式。
这部分文字摘抄自http://www.cnblogs.com/linhaifeng/articles/6182264.html,是目前接触到的解释接比较接地气的说法。个人理解,面向对象是一个抽象归类的思维过程,先梳理出具有共同属性的个体对象,然后对他们抽象归类。这样整个编程的设计思想不再是面向过程中的自上而下的串联顺序关系,而变成一种属于和不属于,具有或者不具有(某种属性)的关系。
优点:
对于复杂的场景,功能实现的灵活性更好,换言之适配性和扩展性更好。
缺点:
面向对象是一个抽象的过程,不同于面向对象的流水线式顺序执行过程,编程的复杂程度更高,首要前提是要梳理出对象之间的关系,归类出相应的属性,对于开发者而言要求更高,需具备一定的储备之后才能胜任一般场景的编程开发。
应用场景:
需求经常变化且相对复杂的软件,一般需求的变化都集中在用户层,互联网应用,游戏等都是面向对象的程序设计大显身手的好地方。