面向过程编程跟面向对象编程

面向过程编程和面向对象编程
面向过程编程和面向对象编程

一、面向过程编程

面向过程编程将程序分成了"数据"和"处理函数"两部分,程序以"处理函数"为核心,如果要执行什么操作,就将"数据"传给相应的"处理函数",返回我们需要的结果.

面向过程的思路很好掌握,上手容易,但它存在三方面的问题:

1、数据和处理函数没有直接的关联,在执行操作的时候,我们不但要选择相应的处理函数,还要自己准备处理函数的数据,也就是说,在执行操作时,我们需要同时关注处理函数和数据.

2、数据和处理函数都城暴露在同一作用域内,没有私有和公有的概念,整个程序中所有的数据和处理函数都可以互相访问,在开发初期也许会开发速度很快,但到了开发后期和维护阶段,由于整个程序耦合得非常紧,任何一个处理函数和数据都有可能关联到其他地方,容易牵一发而全身动,从而加大了修改难度.

3、面向过程的思维方式是典型的计算机思维方式--输入数据给处理器,处理器内部执行运算,处理器返回结果.而实际生活中,我们的思路却不是这样--实际生活中所有的东西都是有状态有动作的物件,能用面向过程思维描述的只是物件的动作.用面向过程的思维方式编程,是无法描绘客观世界的事物的,我们编程的时候无法直接使用生活中的思维方式.

二、面向对象编程

面向对象编程是抛开计算机思维,使用生活中的思维时行编程的编程方式.面向过程的思维就是描述一个个"动作",而面向对象的思维就是描述一个个"物件",客观生活中的物件,都可以通过面向对象思维映射到程序中--如果你使用的编程语言支持面向对象,在程序中我们管"物件"叫做"对象",对象由两部分组成:"属性"和"行为",对应客观世界中的物件的"状态"和"动作".

程序由变量和函数组成,属性本质其实是个变量,也就是面向过程中的数据,而行为的本质其实是函数,也就是面向过程中和处理函数.不同的是,面向过程中,数据和处理函数并没有关联起来,共同属于某个物件.面向对象将数据和处理函数定义到了一个对象的内部,作为这个对象的属性和行为存在.在对象外部,属性和行为可以用对象的属性和对象的行为来调用,从而让程序有了按真实世界的思维方式进行描述的能力.在对象内部,对象的属性和行为通过this关键字关联起来.



面向过程编程所有的数据和处理函数都是公有的,整个编程的思维过程就是定义数据,定义处理函数,然后将数据传给处理函数进行处理,处理函数之间也可以互相调用,数据和处理函数紧密耦合.

面向对象编程的思维过程是定义一个个对象,对象有自己的属性和行为,因为属性和行为都是从属于对象的,于是有了"对象内"和"对象外"的概念,整个程序可以由一堆对象组成,对象与对象之间可能会有通信,为了实现这种通信,对象会将自己的部分属性和行为设计成公有,暴露出来成为通信的接口.对象和对象之间的通信都城是建立在接口的基础上的.当然我们可以将对象所有的属性和行为都设为公有的,全部都作为接口,但接口越多,会让对象之间耦合越紧密,增加维护难度,所以一般情况下,我们都会尽量将对象的属性和行为设为私有,只将必要的属性和行为设为公有.但对象的公有属性和公有行为越少,整个程序的扩展性会越差,所以我们在设计公有和私有的时候需要权衡一下,在不影响扩展性的前提下,尽量将属性和行为设为私有.