何为面向对象,何为面向过程。相信大家在大学计算机课程的时候,老师都会讲,C语言是面向过程的语言,而JAVA是面向对象的语言,甚至将JAVA列为高级编程语言,C语言是基础编程语言。那么,为什么是这样呢,难道仅仅是因为C里面没有关键字CLASS,而JAVA里面都是将代码写在CLASS里面吗。我想显然不是这样,在代码的领域,不可否认CLASS是面向对象的标识之一,但有CLASS就是面向对象的编程吗,而没有CLASS就是面向过程吗。当今,赶上面向对象这股热潮的语言越来越多,JAVA、C、C++、PHP都声称面向对象,JS宣称基于对象,那么有何区别呢?那么使用JAVA的都是面向对象吗。君不见,大量使用JAVA的人,写着面向过程的语言。

个人认为面向对象和面向过程的本质区别是思维方式的区别。面向过程是一种以事件为中心的编程思想,其基本的出发点是如何解决一个问题,本质是先分析问题,然后分解问题,将问题分解为各个小问题,然后将各个小问题分解为各个步骤,然后求解各个子步骤,合并求解的值得出最终的结果。举个例子,如何泡一杯茶,你会如何想呢,先拿茶杯,然后放入茶叶,然后加入开水。这就是一个典型的面向过程的思维,本质是解决泡茶这件事情的。而面向过程呢,本质是面向对象的,先区分对象,然后通过对象的相互交互来体现行为,其本质是对象。同样以泡茶为例子,那门以面向对象的思维会如何想呢,首先基于对象,有几个对象呢,茶叶、茶杯、水,对象之间的交互行为呢,茶杯中加入了茶叶,水加入了茶杯,这个本质上是茶叶的一个行为,例如茶叶有冲泡的行为,那么在冲泡的行为中有拿茶杯,加入水的操作,在冲泡的行为中关联了茶杯和水这两个对象,在编程领域叫注入了这两个对象。那么冲泡的这个行为的本质是什么呢,其实也是个事务,也有步骤,例如拿茶杯,放入茶叶,注水都是有步骤的,所以这个局部本身也是面向过程的。那么有的人有个误解,认为这些应该归结到人的行为,认为泡茶是人的行为。这当然没有错,但我们看问题要有适当的角度,要放大和缩小相应的作用域,这个问题上的本质是泡茶这个行为,把作用域放在茶叶上,显然更加合适。不然所有问题都是人的行为了,例如开车、炒菜、运动都是人的行为,但我们单以开车这件事情来说,我们应该把重心放在车上,其本质是车移动了,车的属性改变了。我想如果把大自然也认为是上帝在编程的话,人这个类一定是特别复杂,有着无数的方法和属性,但这些方法必须归结到特别的事务来承载,而人的行为只是通过注入了这些事务,调用这些事务来改变自身的行为而已。

看到这里有的人会说,总听人说面向对象比面向过程要优秀,要好。但真的是这样吗,不可否认面向对象确实比面向过程再可维护性上有很大的优势,便于维护、扩展。但也仅仅是可维护性上,在其它的方面如性能、效率等还是弱于面向过程的,因为面向对象本质要拆分成很多的对象,拆分其实是引入了更多的代码,而非减少代码。而可维护性是站在人的角度上说的,例如人们常说,使用面向工厂,以后要加个功能,就插入个子类,这样多方便。这里记住方便是对人而说的,对机器来说,增加一个类和增加一个判断分支没有本质区别,而增加了类调用反而使得代码的步骤变多,性能下降。所以绝对不是面向对象就比面向过程高级,君不见面向过程有很多优秀的产品,如操作系统、mysql和redis都是用C写的。

那么为什么要面向对象呢,其本质我认为还是可维护性上,站在人的角度上这个特点特别的重要,可维护性意味着在这个需求不断变化的世界,修改一个功能要比面向过程容易,理解一个功能也要比面向过程容易。总不能叫一个新手,看一连串的方法调用,然后再某个分支中再修改某个功能的时候加入了一个if分支吧。当然大牛除外,对于合理组织代码的面向过程的产品来说,大牛的角度至少在可维护性上应该没有特别的差异。

最后我总结下,这一节的内容,面向对象不比面向过程高级,其本质是看待问题的角度不一样,在现实中两者也非完全割裂的,面向对象中的方法的实现也是以面向事件为核心的,也分步骤,这其实在这个局部层面来说,其实是夹杂着面向过程的思维的。所以说学习面向对象的本质是什么呢,追究其本质就一个词,可维护性。

设计模式-面向对象和面向过程相关推荐

  1. Java面向对象和面向过程有什么区别?网友:傻傻分不清楚……

    面向对象,Obeject Oriented,是一种编程术语.面向对象是当今软件开发方法的主流方法之一,他是把数据以及对数据的操作放在一起,作为一个相互依存的整体,就是我们所说的对象.对同类对象抽象出其 ...

  2. 什么是面向对象 什么是面向过程 面向对象和面向过程的区别

    转自http://blog.163.com/wenxianliang08@126/blog/static/83583263201131611916893/ 面向过程就是分析出解决问题所需要的步骤,然后 ...

  3. Java面向对象和面向过程的区别

    面向对象,Obeject Oriented,是一种编程术语.面向对象是当今软件开发方法的主流方法之一,他是把数据以及对数据的操作放在一起,作为一个相互依存的整体,就是我们所说的对象.对同类对象抽象出其 ...

  4. 面向对象与面向过程理解

    本文源地址: http://blog.csdn.net/ithzhang/article/details/52983530 http://blog.csdn.net/ithzhang/article/ ...

  5. PHP面向对象和面向过程

    php面向对象 和 面向过程 1.面向过程 一件一件罗列 自顶向下,逐步细化 2.面向对象 四大基本特征 1.抽象: 现实世界中的关键特性去为抽象搭建一个模型 抽象模型:属性(数据) 操作(行为) 2 ...

  6. 理论三:面向对象相比面向过程有哪些优势?面向过程真的过时了吗?

    王争<设计模式之美>学习笔记 文章目录 理论三:面向对象相比面向过程有哪些优势?面向过程真的过时了吗? 什么是面向过程编程与面向过程编程语言? 面向对象编程相比面向过程编程有哪些优势? 1 ...

  7. 面向对象和面向过程之间的区别以及优缺点

    面向对象和面向过程详解 说到面向对象,我们都知道C#, Java, C++, python, JS- 都是面向对象的编程语言 说到面向过程,我们都知道C,fortran等都是面向过程的编程语言 今天我 ...

  8. 面向对象与面向过程区别

    面向对象:用线性的思维.与面向过程相辅相成.在软件开发过程中,宏观上,用面向对象来把握事物间复杂的关系,分析系统.微观上,仍然使用面向过程. "面向过程"是一种是事件为中心的编程思 ...

  9. 面向对象编程(一)——面向对象和面向过程

    面向对象(Object Oriented),通过对象来封装我们的数据.(组织代码,封装数据) 面向对象和面向过程: 面向过程:procedure oriented programming,POP 面向 ...

最新文章

  1. thinkpad触控笔怎么用_电容笔怎么用,如何选择一支电容笔来提升生产力呢?
  2. poj 2392 dp 不是很懂哎!!!Space Elevator
  3. java队列_RPC远程调用和消息队列MQ的区别
  4. php大号字体代码,支持中文字母数字、自定义字体php验证码代码
  5. vue 插件 滑块验证_vue滑块验证,原理,demo
  6. 互联网公司无线接入平台怎么样
  7. 基于单片机的自行车码表
  8. python在园林中的应用_攀缘植物在园林中的应用
  9. rtmp/rtsp测试地址 2019/11/22日亲测可用
  10. 流程引擎之Activiti简介
  11. HTML 元素学习指南
  12. 关于Kaggle入门
  13. HDU 4950 Monster
  14. 从美国到中国:C2B的风已经吹起来了
  15. Flask实现ElasticSearch搜索
  16. 模板卷积Template Convolution
  17. 就读在职研究生选一月还是五月好呢?
  18. 倍福---SQLServer数据库通信
  19. 计算机毕业优秀作品展观后感,优秀作业展的观后感(精选6篇)
  20. 第一课 Python Web企业门户网站—Python基础

热门文章

  1. CSS :has伪类
  2. 《新空气工作室章程•草案》
  3. photoshop大头贴证件照片排版拼版视频
  4. redis map 过期时间_redis 过期时间
  5. Ganglia是什么
  6. 分布式监控部署之Ganglia
  7. Node.js下forever使用
  8. 计算机画图城堡作品,我的世界:红石大神作品赏析,需要26分钟才能逛完的机关城堡...
  9. freeswitch cdr odbc
  10. 中文时间格式转英文时间格式