浅谈面向过程(pop)与面向对象(oop)

面向过程和面向对象到底是什么?又有什么区别?这是个编程界老生常谈的问题了;不理解的人觉得很可怕,理解的人又觉得很简单,包括写这篇文章之前我还觉得这是一个只可意会不可言传的概念,但读了众多资料之后,觉得有些比喻及示例确实能让一个几乎小白的人也能理解。

因为是“浅谈”,所以特别专业、工程上的东西就不说了,我们只来理解一下这两样东西到底是什么?浅层次上有什么区别?以及通过几个小比喻、小示例来深入浅出理解一下;不过首先我们需要清楚的是:无论是面向对象还是面向过程,它都只是一种编程思想

一、概念的区别

1.面向过程的英文缩写为:pop(Process-oriented programming),“process”意为“过程”,“oriented”意为“面向”,“programming”在这里意为“编程”;面向过程是一种以过程为中心的编程思想,它是一种基础的顺序的思维方式。代表语言:C语言。

2.面向对象的英文缩写为:oop(Object Oriented Programming),“object”意为“对象”;是按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法。代表语言:C++,JAVA,Python。

二、把大象装进冰箱

看完上面的概念,你肯定依然云里雾里,那接下来我们从一个小比喻出发,我们想一下,把大象装进冰箱分为几步?

1.面向过程的思想
聪明的你肯定已经确定了三步:
1.打开冰箱门; 2.把大象放进冰箱; 3.关上冰箱门;
你说的没错,这是一个完整的可以将大象装进冰箱的流程,而且这是一个彻头彻尾的面向过程的编程思想;因为我们在分析这个问题的时候是按照事件的流程来完成设计的,所以使用面向过程的C语言来表示的话,可能就如下:

int Open()
{"打开冰箱门";
}
int Put()
{"放入大象";
}
int Close()
{"关闭冰箱门";
}
int main()
{Open();Put();Close();return 0;
}

其实再补充一点的话,过程就是函数,我们把完成一个任务的流程分别定义为Open、Put、Close函数,然后在主函数中按照顺序调用,这样就是一个完成认为的一个完整流程,也是一种自上而下的编程思想。

2.面向对象的思想
打开冰箱,放入大象,关闭冰箱是面向过程的思想的话,那我们怎样以面向对象的思想来看待这件事情,其实很简单,就是把完成这个事件的对象当作主体,那这个事件的对象只有两个:大象和冰箱,因此我们可以这样完成把大象放入冰箱的事件:
1.冰箱开门; 2.大象走进冰箱; 3.冰箱关门;
感觉没什么不同对吗?其实在编程思想上已经大不同了,这里我们把对象当作主体,每个动作都需要对象来完成,那这样我们再用python的代码来表示:

class Elephant():  #定义大象类legs = 4color = 'gray'def move(self):'走进冰箱'class Fridge():  #定义冰箱类doors = 1color = 'blue'def open(self):'打开门'def close(self):'关闭门'Fridge.open()  #冰箱开门
Elephant.move()  #大象走进冰箱
Fridge.close()  #冰箱关门

因此通过上面的代码,我们先将两个对象——大象和冰箱定义出来,然后通过大象和冰箱自身的动作来完成把大象放入冰箱的任务;这样一对比,面向过程和面向对象的区别也就基本呈现了;但是不是上面的代码还有点看不懂呢?

三、什么是过程?什么是对象?

接下来我们再来看一下过程对象分别是什么?在上面的代码中又是怎样表示的?
在上文已经提过过程其实就是函数,这个是比较好理解的,包括在面向过程的代码中,我们通过函数把“大象放进冰箱”的事件分成了三个函数分别是:Open、Put和Close,并且在主函数中按照事件的顺序来自上而下的运行这三个函数,这个就是面向过程的编程思想。
那对象又是什么?在python中,我们定义了一个等式“对象 = 属性 + 方法”,这个怎么理解,我们不妨把上文中的冰箱(fridge)类搬出来进行分析:

class Fridge():  #定义冰箱类doors = 1color = 'blue'def open(self):'打开门'def close(self):'关闭门'

我们再看一下“对象 = 属性 + 方法”,我们通过class来定义了一个“冰箱”,通过“doors = 1 和 color = ‘blue’”定义了它的属性:“有一个门,颜色为蓝色”,然后定义了“open 和 close”定义了它所包含的方法:“开门和关门”,这样就完成了一个完整的对象的定义;然后我们在完成“把大象放进冰箱”的事件时,按照正确的顺序,分别让Elephant和Fridge完成相应的操作就可以了,这个就是面向对象的编程思想。
总之,面向过程和面向对象没有高低优劣之分,只不过是编程思想及解决问题的方式不同,这篇文章应该可以帮你在浅层次理解两者的区别,在这个基础上再去学习不同思想的编程语言也就不会在面向过程和面向对象的概念上纠结了!

深入浅出--面向过程编程与面向对象编程相关推荐

  1. python:面向过程编程和面向对象编程思想

    面向对象编程和面向过程编程(函数式编程)都是程序设计的方法,不过稍有区别. 套路 面向过程编程 1. 导入各种外部库2. 设计各种全局变量3. 写一个函数完成某个功能 4. 写一个函数完成某个功能 5 ...

  2. 什么是面向接口编程、面向过程编程、面向对象编程?

    1.什么是面向接口编程?(IOP) 面向接口编程(Interface Oriented Programming:IOP)是一种编程思想,接口作为实体抽象出来的一种表现形式,用于抽离内部实现进行外部沟通 ...

  3. 【JavaScript高级】看完就理解面向过程编程和面向对象编程,不来了解一下?

    文章の目录

  4. 面向接口编程和面向对象编程的区别

    我想,对于各位使用面向对象编程语言的程序员来说,"接口"这个名词一定不陌生,但是不知各位有没有这样的疑惑:接口有什么用途?它和抽象类有什么区别?能不能用抽象类代替接口呢?而且,作为 ...

  5. 面向对象编程 面向过程编程_面向对象的编程真的是死定了

    面向对象编程 面向过程编程 重点(Top highlight) Programming in the 1960s had a big problem: computers weren't that p ...

  6. 我问占小狼到底什么是面向对象编程?他转头就走。

    你好,我是 yes. 面向对象编程想必大家都耳熟能详,但是写了这么多代码你对面向对象有清晰的认识吗? 来看看这几个问题: 到底什么是面向对象编程? 和面向过程编程有什么区别? 什么又称为面向对象语言. ...

  7. 初学Python——面向对象编程

    一.面向对象 or 面向过程? 编程范式: 编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所 ...

  8. python对象编程例子-python(十二)面向对象编程、类

    面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一个功 ...

  9. python对象编程例子-python面向对象编程练习

    练习题 1.面向对象三大特性,各有什么用处,说说你的理解. 面向对象的三大特性: 1.继承:解决代码的复用性问题 2.封装:对数据属性严格控制,隔离复杂度 3.多态性:增加程序的灵活性与可扩展性 2. ...

最新文章

  1. javascript设计模式-组合模式
  2. JavaWeb总结(四)—JSP深入解析
  3. 【技术】TCP 的固定窗口和滑动窗口
  4. 兰州大学第一届 飞马杯 ★★快乐苹果树★★ 树链剖分 + 懒标记 + 树状数组
  5. java正则表达式 匹配()_学习Java正则表达式(匹配、替换、查找)
  6. js将字符串 YYMMDDHHmmss 转化为 date类型
  7. 朱邦芬院士:我所熟悉的几位中国物理学大师的为人之本
  8. 多目标跟踪(MOT)最新综述,一文快速入门
  9. Linux系统安装完成后创建交换空间
  10. php实现mysql查询_PHP如何实现MYSQL查询功能
  11. 如何在AngularJS中使用SpreadJS?
  12. 最新蓝屏代码0x0000006b完美解决方案,附文件
  13. 使用后端解析地图.shp.prj文件得到GeoJson数据
  14. IT行业发展趋势及就业前景?
  15. 嵌入式测试 模拟共享单车
  16. 对接熊迈SDK工作记录之集成准备
  17. 网易游戏测试工程师面试小记
  18. Python专辑-QQ机器人1:基础功能实现
  19. iOS- 本地文本容错搜索引擎2--如何实现英文(英文首字母,汉语拼音)对中文的搜索?...
  20. Tomcat不自动解压war包

热门文章

  1. Rust自制内存作弊器
  2. Java中List,Set和Map详解及其区别和使用场景(转)
  3. 拼多多买菜入驻永善县了,支持自提
  4. Linux 在centos下安装V Mware 出现vmware tools 选项框变成灰色的解决方法
  5. php面向对象笔试题,php练习笔试题
  6. 插件化开发之资源访问
  7. 最短路径算法——迪杰克斯拉算法/floyd算法
  8. 在计算机领域,半精度、单精度、双精度的定义,以及多精度计算和混合精度计算的区别。
  9. Verilog 代码编写 FPGA 数字CMI编码
  10. 基于STM32的智能语音垃圾桶设计