带你理解面向过程与面向对象

一、前言

如果你总是对面向对象和面向过程傻傻分不清,这篇博客尽量会用通俗的方式来讲解。

二、面向过程

概念

面向过程是一种以过程为中心的编程思想,面向过程编程是基于“冯·诺依曼”模型的。在这种模型中,程序与变量一起存储,程序中包含一系列指令,并把这些指令以函数的方式组织起来。

特性

自顶向下、逐步求精、模块化

优点

性能比面向对象高,因为类调用需要实例化,开销比较大,比较消耗资源。

如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,因为在它们看来性能是最重要的因素。

缺点

没有面向对象易维护、易复用、易扩展

(按照面向过程的思想,在解决问题时,各函数之间是为了这个问题服务;而面向对象的思想,则是站在提出问题的主体的角度去解决问题,可将解决这一具体问题的步骤,抽象为解决这一类问题的方法,以后再遇到类似的问题,可以复用解决思路)

三、面向对象

概念

面向对象是按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的方法。通过面向对象的理念,将计算机软件系统能与现实世界中的系统一一对应。

特性

封装、继承、多态

(后续会有文章说明这三个特性)

优点

易维护、易复用、易扩展(在解释面向过程的缺点时有对面向对象的优点进行解释)

缺点

性能比面向过程低

四、面向过程与面向对象的区别

面向过程是直接将解决问题的步骤分析出来,然后用函数把步骤一步一步实现,然后再依次调用就可以了;而面向对象是将构成问题的事物,分解成若干个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在解决问题过程中的行为。

面向过程思想偏向于我们做一件事的流程,首先做什么,其次做什么,最后做什么。

面向对象思想偏向于了解一个人,这个人的性格、特长是怎么样的,有没有遗传到什么能力,有没有家族病史。

打个比方,分别求出长方形、圆形的周长和面积。

面向过程会以,求解数学题的思路去思考:

  1. 设定长方形的长和宽分别为x和y,圆的半径为r

  2. 确定长方形、圆形的周长和面积的算法

  3. 编写出两个计算周长和面积的函数

  4. 将x、y和r传入相对应的函数,求解长方形、圆形的周长和面积

面向对象会以,描述对象的思路去思考:

  1. 对规则图形的一般属性和性质进行定义,如周长和面积

  2. 在规则图形的基础上,创建长方形,描述长方形的属性和性质

  3. 在规则图形的基础上,创建圆形,描述圆的属性和性质

  4. 分别创建长方形和圆形的对象,调用它们的周长和面积函数,以求解长方形、圆形的周长和面积

面向过程是从细节出发,将问题细化为先后步骤;

面向对象从宏观出发,重在模拟整个情境中各个要素之间的交互。

五、面向对象的特点

在了解其特点之前,咱们先谈谈对象,对象就是现实世界存在的任何事务都可以称之为对象,有着自己独特的个性

属性用来描述具体某个对象的特征。比如小杨身高178M,体重65KG,这里身高、体重都是属性。
面向对象的思想就是把一切都看成对象,而对象一般都由属性+方法组成!

属性属于对象静态的一面,用来形容对象的一些特性,方法属于对象动态的一面,咱们举一个例子,小杨会跑,会说话,跑、说话这些行为就是对象的方法!所以为动态的一面, 我们把属性和方法称为这个对象的成员!

:具有同种属性的对象称为类,是个抽象的概念。比如“人”就是一类,期中有一些人名,比如小明、小红、小玲等等这些都是对象,类就相当于一个模具,他定义了它所包含的全体对象的公共特征和功能,对象就是类的一个实例化,小明就是人的一个实例化!我们在做程序的时候,经常要将一个变量实例化,就是这个原理!我们一般在做程序的时候一般都不用类名的,比如我们在叫小明的时候,不会喊“人,你干嘛呢!”而是说的是“小明,你在干嘛呢!”

面向对象有三大特性,分别是封装性、继承性和多态性,这里小编不给予太多的解释,因为在后边的博客会专门总结的!

六、举例说明面向过程与面向对象

面向过程——五子棋

1、开始游戏

2、黑子先走

3、绘制画面

4、判断输赢

5、轮到白子

6、绘制画面

7、判断输赢

8、返回步骤

9、输出最后结果

大家可以看出,把上面每个步骤用不同的方法来实现。

面向对象——五子棋

面向对象的设计则是从另外的思路来解决问题。

1、黑白双方,这两方的行为是一模一样的。

2、棋盘系统,负责绘制画面。

3、规则系统,负责判定诸如犯规、输赢等。

第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了多个步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

发布了6 篇原创文章 · 获赞 6 · 访问量 87

猜你喜欢

转载自blog.csdn.net/qq_43658155/article/details/104710682