浅谈面向过程(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. Enterprise Library 2.0 Hands On Lab 翻译(1):数据访问程序块(一)
  2. Google强化学习框架SEED RL环境部署
  3. c# 使用NOPI 操作Excel
  4. 数字计算机如何分类 依据是什么,计算机如何分类?
  5. BZOJ 5109 [CodePlus 2017]大吉大利,晚上吃鸡!
  6. 前后端分离之图片上传服务端处理方法(亲测通过)
  7. react hook(基础详解)
  8. win10 关闭自动更新
  9. 文件在另一个程序中打开,无法删除~【删除文件被占用问题】(保姆级教程,五种解决办法~)
  10. 如何从ext3升级到ext4?
  11. 【Resnet】Resnet代码详解(图+代码)
  12. android简单音乐播放器(二)
  13. 2016-2017 CT S03E06: Codeforces Trainings Season 3 Episode 6(8/13)
  14. C Primer Plus 第五章 课后答案
  15. cps网店php源码,100%开源程序 PHP源码 页游联运系统 CPA+CPS
  16. char* char[] string
  17. 选择java还是python-编程语言是选择Java还是Python好呢?
  18. 如何修改视频MD5的格式?这些方法值得你收藏
  19. win7桌面右下角提示副本不是正版怎么办?
  20. 利用telex离线下载国外网盘资源

热门文章

  1. vs2017下,release模式下调试debug信息-不优化变量
  2. 多序列比对要多久时间_使用 MAFFT 进行多序列比对
  3. Magic boy Bi Luo with his excited tree
  4. windows 下 暗黑世界 客户端 的 测试
  5. python3.5.4爬取豆瓣中国内地电影票房总排行输出到excel
  6. 大吉大利-今晚吃鸡-跑毒
  7. 制度管人,流程管事,团队打天下,管理定江山
  8. mysql开放允许外部连接_设置MySql允许外部连接的方法
  9. c程序设计语言的opds书源,汇编语言程序设计第9章子程序设计.ppt-资源下载在线文库www.lddoc.cn...
  10. 【转】OpenGL入门学习[十五]