700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 设计模式-面向对象和面向过程

设计模式-面向对象和面向过程

时间:2023-11-14 19:25:34

相关推荐

设计模式-面向对象和面向过程

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

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

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。