面向过程和面向对象都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计和开发软件。
伴随着每个开发人员的职业生涯,或多或少都会接触到这两种软件设计思想。不仅是软件开发人员,其实这两种思想在我们平时的生活中也处处可见,下面我将一步一步的来揭开面向过程和面向对象的神秘面纱。
一、基本概念
1、面向过程(Procedure Oriented) 是一种以过程为中心的编程思想。“面向过程” 也可称之为 “面向记录” 编程思想。简而言之,面向过程强调流程化,线性化,步骤化的思考方式。
2、面向对象 (Object Oriented,OO) 是软件开发方法和编程思想。首先强调整体性和差异性,即可将任何事物看做一个有机统一的整体来研究,然后通过派生的方式实现差异性来降低高耦合的可能性;其次强调行为的多样性和多态性,然后后强调高度可扩展性,由此也因说明了面向对象的四个基本特征,抽象,封装,继承,多态。
二、面向过程和面向对象的区别
1、面向过程的优缺点
效率高, 面向过程强调代码的胆小精悍,善于结合数据结构来开发高效率的程序。
流程明确,具体步骤清楚,便于节点分析。
缺点是:需要深入的思考,耗费精力,代码重用性低,扩展能力差,维护起来难度比较高,对复杂业务来说,面向对象的模块话难度较高,耦合度也比较高。
2、面向对象的优缺点
结构清晰,程序便于模块化,结构化,抽象化,更加符合人类的思维方式;
封装性,将事务高度抽象,从而便于流程中的行为分析,也便于操作和自省;
容易扩展,代码重用率高,可继承,可覆盖;
实现简单,可有效地减少程序的维护工作量,软件开发效率高。
面向对象的缺点:效率低,面向对象在面向过程的基础上高度抽象,从而和代码底层的直接交互非常少机会,从而不适合底层开发和游戏甚至多媒体开发;复杂性,对于事务开发而言,事务本身是面向过程的,过度的封装导致事务本身的复杂性提高。
面向对象三大特征:封装、继承、多态。
封装:封装是一种把代码和代码所操作的数据捆绑在一起,使这两者不受外界干扰和误用的机制。封装可被理解为一种用作保护的包装器,以防止代码和数据被包装器外部所定义的其它代码任意访问。
继承:继承是指一个对象从另一个对象中获得属性和方法的过程。它支持按层次分类的概念,如果不使用层次的概念,每个对象需要明确定义各自的全部特征,通过层次分类方式,一个对象只需要在它的类中定义使它成为唯一的各个属性和方法。
多态:多态是指同一个实体同时具有多种形式。同一操作作用于不用的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的引用,来调用实现派生类中的方法。
三、实例分析
这里就拿大家熟知的如何把大象放进冰箱里的案例来分析面向对象和面向过程这两种思想。
答案大家早已耳熟能详:第一步,打开冰箱门;第二步,把大象装进去;第三步,关上冰箱门。
这就是一个典型的面向过程的思想。虽然看上去有点不可思议,但是回答的又是那么的无懈可击。
如果用面向对象的思想来分析这个问题,又会怎么样呢?请看下图:
这个需求里一共出现了三个对象:人、大象、冰箱
定义好上面三个对象的属性和方法之后,我们只需要分别调用对象完成需求即可。
小结:
通过上面的分析我们会发现:面向过程适合于一个人的小量工作,而面向对象更侧重于团队合作,需要很多人完成的大量工作。面向过程思想是我们每一个人天生具备的。在编程时,我们总会不自觉的去考虑怎么来完成某一需求,分析出具体的步骤,然后按照步骤来一步步实现。但是在现实生活当中,并不是每一件事都可以自己独立来完成,我们需要团队,需要合作才可以完成某一项复杂的工作。这样来看的话,面向对象思想似乎更符合人们的做事方式,也更生活化。是的呢,不管是生活中,亦或是编程中,面向对象才是我们更应该具备的一种思想