06 | 理论三:面向对象相比面向过程有哪些优势?面向过程真的过时了吗?
王争
该思维导图由 AI 生成,仅供参考
在上两节课中,我们讲了面向对象这种现在非常流行的编程范式,或者说编程风格。实际上,除了面向对象之外,被大家熟知的编程范式还有另外两种,面向过程编程和函数式编程。面向过程这种编程范式随着面向对象的出现,已经慢慢退出了舞台,而函数式编程目前还没有被广泛接受。
在专栏中,我不会对函数式编程做讲解,但我会花两节课的时间,讲一下面向过程这种编程范式。你可能会问,既然面向对象已经成为主流的编程范式,而面向过程已经不那么推荐使用,那为什么又要浪费时间讲它呢?
那是因为在过往的工作中,我发现很多人搞不清楚面向对象和面向过程的区别,总以为使用面向对象编程语言来做开发,就是在进行面向对象编程了。而实际上,他们只是在用面向对象编程语言,编写面向过程风格的代码而已,并没有发挥面向对象编程的优势。这就相当于手握一把屠龙刀,却只是把它当作一把普通的刀剑来用,相当可惜。
所以,我打算详细对比一下面向过程和面向对象这两种编程范式,带你一块搞清楚下面这几个问题(前三个问题我今天讲解,后三个问题我放到下一节课中讲解):
什么是面向过程编程与面向过程编程语言?
面向对象编程相比面向过程编程有哪些优势?
为什么说面向对象编程语言比面向过程编程语言更高级?
有哪些看似是面向对象实际是面向过程风格的代码?
在面向对象编程中,为什么容易写出面向过程风格的代码?
面向过程编程和面向过程编程语言就真的无用武之地了吗?
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
面向过程编程与面向对象编程的区别在于代码组织方式和设计思路。面向过程编程以过程为基本单元,适合简单程序开发;而面向对象编程以类或对象为基本单元,更适用于复杂程序开发。文章通过C语言和Java的代码示例展示了两种编程风格的不同之处。面向对象编程相比面向过程编程具有更好的代码组织方式、更易维护和扩展、更高的抽象能力等优势,适用于大规模复杂程序的开发。此外,面向对象编程提供了封装、抽象、继承、多态等特性,使代码更易复用、易扩展、易维护。尽管面向过程编程和面向对象编程并非完全对立,但面向对象编程已成为主流编程范式。文章深入浅出地对比了两种编程风格,帮助读者更好地理解了它们的区别和优势。面向对象编程语言比起面向过程编程语言,更加人性化、更加高级、更加智能。面向对象编程更容易应对大规模复杂程序的开发,具有更丰富的特性,更易扩展、易复用、易维护。文章深入浅出地对比了两种编程风格,帮助读者更好地理解了它们的区别和优势。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《设计模式之美》,新⼈⾸单¥98
《设计模式之美》,新⼈⾸单¥98
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(274)
- 最新
- 精选
- 相逢是缘使用任何一个编程语言编写的程序,最终执行上都要落实到CPU一条一条指令的执行(无论通过虚拟机解释执行,还是直接编译为机器码),CPU看不到是使用何种语言编写的程序。对于所有编程语言最终目的是两种:提高硬件的运行效率和提高程序员的开发效率。然而这两种很难兼得。 C语言在效率方面几乎做到了极致,它更适合挖掘硬件的价值,如:C语言用数组char a[8],经过编译以后变成了(基地址+偏移量)的方式。对于CPU来说,没有运算比加法更快,它的执行效率的算法复杂度是O(1)的。从执行效率这个方面看,开发操作系统和贴近硬件的底层程序,C语言是极好的选择。 C语言带来的问题是内存越界、野指针、内存泄露等。它只关心程序飞的高不高,不关心程序猿飞的累不累。为了解脱程序员,提高开发效率,设计了OOP等更“智能”的编程语言,但是开发容易毕竟来源于对底层的一层一层又一层的包装。完成一个特定操作有了更多的中间环节, 占用了更大的内存空间, 占用了更多的CPU运算。从这个角度看,OOP这种高级语言的流行是因为硬件越来越便宜了。我们可以想象如果大众消费级的主控芯片仍然是单核600MHz为主流,运行Android系统点击一个界面需要2秒才能响应,那我们现在用的大部分手机程序绝对不是使用JAVA开发的,Android操作系统也不可能建立起这么大的生态。
作者回复: 👍
2019-11-16511209 - 养成好习惯go语言大力推举函数式编程,这是趋势吗老师
作者回复: 函数式编程让写代码更加简单些,封装了很多设计模式、并发处理,可能是个趋势。
2019-11-18439 - 未未的未来疑问: 老师举的文件那个例子,使用面向对象编程那个,不是封装了函数,用函数对操作过程进行了抽象了吗,为什么老师说没有用到封装、抽象这些特性? 思考题: 理解,C语言虽然是面相过程语言,但是面向过程语言也可以写面向对象的,另外,C语言更贴近底层一些,写操作系统的话还是有性能上的优势。
作者回复: 你指出的这点很好。关于封装,有两种理解,一种是狭义的面向对象特性:封装是一种信息隐藏,需要把数据和方法放到一起,而c语言实现的代码,数据和方法是分离的。封装的另一种广义的理解,可以包含你指的封装函数。抽象实际上我们前面章节中也讲到过,比较没有特异性,有的时候不看做面向对象的特性。
2019-11-15109 - 椿文中这一段,“如何给业务建模,如何将需求翻译为类,如何给类之间建立交互关系”,后续会有章节展开简介吗?
作者回复: 有的 实战篇
2019-11-1546 - Jesse想问个问题,面向对象语言是不是没有办法直接操作系统资源?而C语言可以,所以C语言成为操作系统的首选语言,是这样吗
作者回复: 这个也算是个不错的理由。
2019-11-1546 - hudsonformatToText换成toString是不是更符合习惯?
作者回复: 会不会有歧义呢?
2019-11-1535 - 初学者感觉现在写代码,不是面向对象开发,更感觉像是面向数据库开发
作者回复: 大部分人都是这个感觉
2020-11-2433 - xavier是否可以这样理解,在例子代码中,将类一层层往下剖析,单独看类中的某个函数方法,可能是面向过程的。但当封装成一个类并使用时,就是面向对象的。
作者回复: 理解的没错。
2019-11-152 - 都市鸽go 语言的函数式编程算面向过程吗
作者回复: 不算,是一种新的编程范式
2020-01-071 - dagecao暂时就只有这么几节课吗?啥时候发新的课程呢?
作者回复: 每周更新三篇
2019-11-171
收起评论