在面试时经常会被问到面向过程和面向对象有什么区别,虽然都是编程的一种思想,但是他们的侧重点不同,我们从以下几个方面进行简单总结。

1. 面向过程

面向过程是一种以事件为中心的编程思想,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数。

举个例子,下五子棋,面向过程的设计思路是首先分析解决这个问题的步骤:

(1)开始游戏(2)黑子先走(3)绘制画面(4)判断输赢(5)轮到白子(6)绘制画面(7)判断输赢(8)返回步骤 (9)输出最后结果。

用函数实现上面一个一个的步骤,然后在下五子棋的主函数里依次调用上面的函数(不同的编程语言有不同的调用方法,我这里写的是直接调用):

下五子棋{

开始游戏();

黑子先走();

绘制画面();

判断输赢();

轮到白子();

绘制画面();

判断输赢();

返回到 黑子先走();

输出最后结果;
}

可见,面向过程始终关注的是怎么一步一步地判断棋局输赢的,通过控制代码,从而实现函数的顺序执行。

2. 面向对象

在日常生活或编程中,简单的问题可以用面向过程的思路来解决,直接有效,但是当问题的规模变得更大时,用面向过程的思想是远远不够的。所以慢慢就出现了面向对象的编程思想。世界上有很多人和事物,每一个都可以看做一个对象,而每个对象都有自己的属性和行为,对象与对象之间通过方法来交互。面向对象是一种以“对象”为中心的编程思想,把要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个对象在整个解决问题的步骤中的属性和行为。

在下五子棋的例子中,用面向对象的方法来解决的话,首先将整个五子棋游戏分为三个对象:

(1)黑白双方,这两方的行为是一样的。

(2)棋盘系统,负责绘制画面

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

然后赋予每个对象一些属性和行为:

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

可以看出,面向对象是以功能来划分问题,而不是以步骤解决。比如绘制画面这个行为,在面向过程中是分散在了多个步骤中的,可能会出现不同的绘制版本,所以要考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘系统这个对象中出现,从而保证了绘图的统一。

3、面向对象和面向过程的区别

之前在博客上看到这个比喻,觉得特别恰当,挺容易让人理解的,现在分享一下:

用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。所谓盖浇饭,北京叫盖饭,东北叫烩饭,广东叫碟头饭,就是在一碗白米饭上面浇上一份盖菜,你喜欢什么菜,你就浇上什么菜。我觉得这个比喻还是比较贴切的。

蛋炒饭制作的细节,我不太清楚,因为我没当过厨师,也不会做饭,但最后的一道工序肯定是把米饭和鸡蛋混在一起炒匀。盖浇饭呢,则是把米饭和盖菜分别做好,你如果要一份红烧肉盖饭呢,就给你浇一份红烧肉;如果要一份青椒土豆盖浇饭,就给浇一份青椒土豆丝。

蛋炒饭的好处就是入味均匀,吃起来香。如果恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么唯一的办法就是全部倒掉,重新做一份青菜炒饭了。盖浇饭就没这么多麻烦,你只需要把上面的盖菜拨掉,更换一份盖菜就可以了。盖浇饭的缺点是入味不均,可能没有蛋炒饭那么香。

到底是蛋炒饭好还是盖浇饭好呢?其实这类问题都很难回答,非要比个上下高低的话,就必须设定一个场景,否则只能说是各有所长。如果大家都不是美食家,没那么多讲究,那么从饭馆角度来讲的话,做盖浇饭显然比蛋炒饭更有优势,他可以组合出来任意多的组合,而且不会浪费。

盖浇饭的好处就是”菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是”可维护性“比较好,”饭” 和”菜”的耦合度比较低。蛋炒饭将”蛋”“饭”搅和在一起,想换”蛋”“饭”中任何一种都很困难,耦合度很高,以至于”可维护性”比较差。软件工程追求的目标之一就是可维护性,可维护性主要表现在3个方面:可理解性、可测试性和可修改性。面向对象的好处之一就是显著的改善了软件系统的可维护性。

四、总结

面向过程:
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。

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

面向对象:
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护

缺点:性能比面向过程低

你真的知道面向过程和面向对象的区别吗?相关推荐

  1. JAVA入门级教学之(面向过程和面向对象的区别)

    目录 JAVA入门级教学之(面向过程和面向对象的区别) 面向过程和面向对象的区别: -面向过程: -面向对象: -发展历程: -生命周期中包括: -什么是类: -什么是对象: -软件开发的过程: -重 ...

  2. 简单抽象的去理解 面向过程和面向对象 的区别

    面向过程和面向对象的区别 兴趣所致录 面向过程 场景:你是一条不折不扣的单身狗,然后还想吃苹果[手动滑稽狗头] 首先吃苹果得有苹果,所以得去买苹果,然后洗苹果, 如果焦作一下不想吃皮,你得先削皮, 要 ...

  3. 面向过程和面向对象的区别及优缺点

    面向过程和面向对象的区别及优缺点 面向过程: 面向过程是一种自顶向下的编程. 面向过程优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开发. Linux/U ...

  4. 什么是面向对象、面向过程与面向对象的区别

    要讲区别,首先我们得先来弄弄清楚什么是面向过程,什么是面向对象. 面向过程是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. 比如把大象放进冰箱,第一 ...

  5. php面向过程和面向对象的区别

    PHP语言是同时可以应用面向过程和面向对象方式的编程,面向过程与面向对象在许多编程语言中只能使用二者之一来进行编程,但是PHP语言与其他编程语言有不同之处,那就是我们可以自由的选择某种编程方式,或者将 ...

  6. 面向过程和面向对象的区别(转)

    面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙 ...

  7. 面向过程和面向对象的区别

    面向过程 设计思想: 自顶向下的设计模式 分析解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 是以算法为核心的 将大问题转化为若干小问题来求解 表现形式:用函数来作为划分程序的基本单位 直接面 ...

  8. 面向对象和面向过程的区别_面向过程和面向对象的区别

    先来看生活中的一个例子. 想必每个人都下过五子棋吧?在下棋的整个过程中可以有两种不同的思路来实现: 1.按步骤来看: (1).开始游戏,(2).黑子先走,(3).绘制画面,(4).判断输赢,(5).轮 ...

  9. Java基础-学习笔记(五)——面向过程和面向对象的区别

    学习面向对象的语言,要弄清楚面向对象,首先要从理解面向过程开始. 回想起之前在学习C语言时,每次拿到一个题目,首先想到的是,先分析出解决问题所需要的步骤,每一个功能点,用一个函数来表示,使用的时候一个 ...

最新文章

  1. python生成固定形状的词云图
  2. http三次握手四次挥手详解
  3. c语言结果九位数,C语言实例:九位累进可除数
  4. Win10 系统直接在目录下打开cmd
  5. 3.3 超参数训练的实践:Pandas VS Caviar
  6. atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException
  7. 区块链教程Fabric1.0源代码分析配置交易-生成通道配置
  8. SPSS 问卷与量表的区别及联系【SPSS 030期】
  9. 【原理+实战+视频+源码】马士兵Java高级互联网架构
  10. 根据经纬度计算两地之间的距离
  11. WiFi 5G频段差分巴伦电路对接收灵敏度的影响
  12. c语言水王争霸链表,水王争霸
  13. android 9 vxp 闪退,XPrivacyLua限制了权限的应用无法打开
  14. nacos 消息机制
  15. Windows配置万德(Wind)量化接口
  16. 监控神器普罗米修斯Prometheus安装配置
  17. 【讲座笔记】如何让你的皮肤变年轻?
  18. PgRouting求解大数据量最短路径
  19. 手机浏览器跳转微信指定页面加好友及跳转微信公众号一键关注
  20. 偏度和峰度存在的意义

热门文章

  1. 边做边爱(1)——mapbox做分析图
  2. 关于sqlserver身份登录失败的解决方法
  3. 怎么求最大公因数和最小公倍数
  4. try的动词用法_try的用法都有什么
  5. java计算机毕业设计教师管理系统源码+mysql数据库+系统+lw文档+部署
  6. 微信小程序下载文件并重命名,并在微信可以打开、保存并转发给好友
  7. ajaxPro.dll基础教程
  8. 图像处理中像素和毫米的换算
  9. 切图具体需要切什么内容_UI日常-切图切图怎么破?
  10. xp升级到win7傻瓜教程_重装系统软件哪些比较好_windows7教程