如果你总是对面向对象和面向过程傻傻分不清,这篇博客尽量会用通俗的方式来讲解。
二、面向过程 概念面向过程是一种以过程为中心的编程思想,面向过程编程是基于“冯·诺依曼”模型的。在这种模型中,程序与变量一起存储,程序中包含一系列指令,并把这些指令以函数的方式组织起来。
特性自顶向下、逐步求精、模块化
优点性能比面向对象高,因为类调用需要实例化,开销比较大,比较消耗资源。
如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,因为在它们看来性能是最重要的因素。
缺点没有面向对象易维护、易复用、易扩展
(按照面向过程的思想,在解决问题时,各函数之间是为了这个问题服务;而面向对象的思想,则是站在提出问题的主体的角度去解决问题,可将解决这一具体问题的步骤,抽象为解决这一类问题的方法,以后再遇到类似的问题,可以复用解决思路)
三、面向对象 概念面向对象是按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的方法。通过面向对象的理念,将计算机软件系统能与现实世界中的系统一一对应。
特性封装、继承、多态
(后续会有文章说明这三个特性)
优点易维护、易复用、易扩展(在解释面向过程的缺点时有对面向对象的优点进行解释)
缺点性能比面向过程低
四、面向过程与面向对象的区别面向过程是直接将解决问题的步骤分析出来,然后用函数把步骤一步一步实现,然后再依次调用就可以了;而面向对象是将构成问题的事物,分解成若干个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在解决问题过程中的行为。
面向过程思想偏向于我们做一件事的流程,首先做什么,其次做什么,最后做什么。
面向对象思想偏向于了解一个人,这个人的性格、特长是怎么样的,有没有遗传到什么能力,有没有家族病史。
打个比方,分别求出长方形、圆形的周长和面积。
面向过程会以,求解数学题的思路去思考:
设定长方形的长和宽分别为x和y,圆的半径为r
确定长方形、圆形的周长和面积的算法
编写出两个计算周长和面积的函数
将x、y和r传入相对应的函数,求解长方形、圆形的周长和面积
面向对象会以,描述对象的思路去思考:
对规则图形的一般属性和性质进行定义,如周长和面积
在规则图形的基础上,创建长方形,描述长方形的属性和性质
在规则图形的基础上,创建圆形,描述圆的属性和性质
分别创建长方形和圆形的对象,调用它们的周长和面积函数,以求解长方形、圆形的周长和面积
面向过程是从细节出发,将问题细化为先后步骤;
面向对象从宏观出发,重在模拟整个情境中各个要素之间的交互。
五、面向对象的特点在了解其特点之前,咱们先谈谈对象,对象就是现实世界存在的任何事务都可以称之为对象,有着自己独特的个性
属性用来描述具体某个对象的特征。比如小杨身高178M,体重65KG,这里身高、体重都是属性。
面向对象的思想就是把一切都看成对象,而对象一般都由属性+方法组成!
属性属于对象静态的一面,用来形容对象的一些特性,方法属于对象动态的一面,咱们举一个例子,小杨会跑,会说话,跑、说话这些行为就是对象的方法!所以为动态的一面, 我们把属性和方法称为这个对象的成员!
类:具有同种属性的对象称为类,是个抽象的概念。比如“人”就是一类,期中有一些人名,比如小明、小红、小玲等等这些都是对象,类就相当于一个模具,他定义了它所包含的全体对象的公共特征和功能,对象就是类的一个实例化,小明就是人的一个实例化!我们在做程序的时候,经常要将一个变量实例化,就是这个原理!我们一般在做程序的时候一般都不用类名的,比如我们在叫小明的时候,不会喊“人,你干嘛呢!”而是说的是“小明,你在干嘛呢!”
面向对象有三大特性,分别是封装性、继承性和多态性,这里小编不给予太多的解释,因为在后边的博客会专门总结的!
六、举例说明面向过程与面向对象 面向过程——五子棋1、开始游戏
2、黑子先走
3、绘制画面
4、判断输赢
5、轮到白子
6、绘制画面
7、判断输赢
8、返回步骤
9、输出最后结果
大家可以看出,把上面每个步骤用不同的方法来实现。
面向对象——五子棋面向对象的设计则是从另外的思路来解决问题。
1、黑白双方,这两方的行为是一模一样的。
2、棋盘系统,负责绘制画面。
3、规则系统,负责判定诸如犯规、输赢等。
第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了多个步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。