关于面向对象和面向过程之我的理解
之前在充血和贫血模式中只是想简单的说下自己对面向对象和过程的理解,后来觉得写的多了和题目有点太不对称的。所以单独拿出。
其实面向对象和面向过程是说浅很浅说深很深的话题,深一点的写一本书都不为过,我在这里只是介绍一下我是怎么想的。
最早接触到语言是 vb 和c 然后是java 然后是c++ 然后 .net 然后是php。有的学习和工作用了很长时间。有点完全只是想去学习一下。之前对面向过程和面向对象的理解一直是懵懵懂懂的,一直到大学毕业的时候都是。只是知道 java 是面向对象 c 是面向过程的。仅此。其他一些概念也基本是懵懵懂懂的,没有什么具体的了解。
后来工作以后一方面是使用C#.Net 更多的接触到了设计对象的思想,另外一方面也是中超等人平时对我的帮助,再加上日常对c 和其他知识的学习,让自己在这方面有了较清晰的认识。
首先面向对象和面向过程:都是人们对问题处理和认知世界的一种方式。
这二者其实是密不可分的。
首先人们对世界的认识,对一件件物体,一件件东西,一个个人的认识就是面向对象。每个对象就是人们脑海中可以被打比喻的具有一定形态的物质。这些物质有很多的属性,比如长宽高,质量,名字,父母等等,这些就是这个物体的属性。而这个物体也就被称之为了对象。与此同时这个对象还有很多,除属性以外的东西,具有某些功能(计算题目),有某些特性(一遇到,他就会融化),这个就是对象的方法。之前说到充血模式,很多人也就认为,只有包含方法(灵魂)的对象,才是真正的对象,否则只是一个数据结构。(本人对此持中立观点。)
其次人们如何解决问题的这种思路或者说是一种想法换句话说也就是一种思维过程的方式,就是过程了。整体的这种思维方式也就是面向过程了。比如说解一道数学题,算一次因式分解,做一次阅读理解。可以说都是面向过程的考虑了。
所以说具体是面向过程,还是面向对象的思想,采用了哪一种,和语言的关系并不大。说关系并不大是因为有些语言本身的原因导致在形式上代码是面向对象的。可是具体设计上却是面向过程的思路。一个拥有了很好的面向对象的工程师,一样可以用c写出具有优秀封装,完善的面向对象思想的代码。
为什么要面向过程:面向过程可以快速的拿出解决问题的方法,可以更好的符合人们的思维,因为人们就是这样的解决问题的。
为什么要面向对象:面向对象可以极大的降低代码的耦合性,扩展代码业务逻辑,因为人们就是这样认知世界的。
在了解了这些之后,谈一谈我为什么认为二者是密不可分的。我经常在上下班的路上在考虑,怎么样的代码算是面向对象了,算是中超说的oo了,算是很好的内聚了类。后来我发现要想完全的去除面向过程是不可能,因为面向对象本身的灵魂也就是算法,本质上就是人类以一种思维方式的形式将其赋予了对象。所以在面向对象的灵魂(方法)中,一定是拥有面向过程的。
而面向过程之所以离不开面向对象,是因为这是人的思考方式,人对世界的认知本来就是以对象为单位进行思考的。小到一个变量x的求和排序, 大到一个人一个动物的方法,其实上都是人们在操作对象的一种思维,所以二者是一环套一环的就像:
对象 ---->拥有方法 ---》操作对象----》拥有方法----》操作对象。。。。
而想要有很好的面向对象思想,就要对代码设计,业务设计有很好的了解,这也就是为什么很多类的抽象类都是由有一定经验的老员工来完成。因为他们对整体的认知要把握的更好了。
之前在网上还见到有人是这样理解二者的(可能与原话有点不太一样):面向过程是人们解决事务的方式,面向对象是对象被动的被触发的方式。
如果你觉得写的不错,欢迎转载和点赞。 转载时请保留作者署名jilodream/王若伊_恩赐解脱(博客链接:http://www.cnblogs.com/jilodream/