设计模式之美
王争
前 Google 工程师,《数据结构与算法之美》专栏作者
120453 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 113 讲
设计模式与范式:行为型 (18讲)
设计模式之美
15
15
1.0x
00:00/00:00
登录|注册

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

在上两节课中,我们讲了面向对象这种现在非常流行的编程范式,或者说编程风格。实际上,除了面向对象之外,被大家熟知的编程范式还有另外两种,面向过程编程和函数式编程。面向过程这种编程范式随着面向对象的出现,已经慢慢退出了舞台,而函数式编程目前还没有被广泛接受。
在专栏中,我不会对函数式编程做讲解,但我会花两节课的时间,讲一下面向过程这种编程范式。你可能会问,既然面向对象已经成为主流的编程范式,而面向过程已经不那么推荐使用,那为什么又要浪费时间讲它呢?
那是因为在过往的工作中,我发现很多人搞不清楚面向对象和面向过程的区别,总以为使用面向对象编程语言来做开发,就是在进行面向对象编程了。而实际上,他们只是在用面向对象编程语言,编写面向过程风格的代码而已,并没有发挥面向对象编程的优势。这就相当于手握一把屠龙刀,却只是把它当作一把普通的刀剑来用,相当可惜。
所以,我打算详细对比一下面向过程和面向对象这两种编程范式,带你一块搞清楚下面这几个问题(前三个问题我今天讲解,后三个问题我放到下一节课中讲解):
什么是面向过程编程与面向过程编程语言?
面向对象编程相比面向过程编程有哪些优势?
为什么说面向对象编程语言比面向过程编程语言更高级?
有哪些看似是面向对象实际是面向过程风格的代码?
在面向对象编程中,为什么容易写出面向过程风格的代码?
面向过程编程和面向过程编程语言就真的无用武之地了吗?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《设计模式之美》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(270)

  • 最新
  • 精选
  • 相逢是缘
    使用任何一个编程语言编写的程序,最终执行上都要落实到CPU一条一条指令的执行(无论通过虚拟机解释执行,还是直接编译为机器码),CPU看不到是使用何种语言编写的程序。对于所有编程语言最终目的是两种:提高硬件的运行效率和提高程序员的开发效率。然而这两种很难兼得。 C语言在效率方面几乎做到了极致,它更适合挖掘硬件的价值,如:C语言用数组char a[8],经过编译以后变成了(基地址+偏移量)的方式。对于CPU来说,没有运算比加法更快,它的执行效率的算法复杂度是O(1)的。从执行效率这个方面看,开发操作系统和贴近硬件的底层程序,C语言是极好的选择。 C语言带来的问题是内存越界、野指针、内存泄露等。它只关心程序飞的高不高,不关心程序猿飞的累不累。为了解脱程序员,提高开发效率,设计了OOP等更“智能”的编程语言,但是开发容易毕竟来源于对底层的一层一层又一层的包装。完成一个特定操作有了更多的中间环节, 占用了更大的内存空间, 占用了更多的CPU运算。从这个角度看,OOP这种高级语言的流行是因为硬件越来越便宜了。我们可以想象如果大众消费级的主控芯片仍然是单核600MHz为主流,运行Android系统点击一个界面需要2秒才能响应,那我们现在用的大部分手机程序绝对不是使用JAVA开发的,Android操作系统也不可能建立起这么大的生态。

    作者回复: 👍

    50
    1186
  • 养成好习惯
    go语言大力推举函数式编程,这是趋势吗老师

    作者回复: 函数式编程让写代码更加简单些,封装了很多设计模式、并发处理,可能是个趋势。

    4
    35
  • 未未的未来
    疑问: 老师举的文件那个例子,使用面向对象编程那个,不是封装了函数,用函数对操作过程进行了抽象了吗,为什么老师说没有用到封装、抽象这些特性? 思考题: 理解,C语言虽然是面相过程语言,但是面向过程语言也可以写面向对象的,另外,C语言更贴近底层一些,写操作系统的话还是有性能上的优势。

    作者回复: 你指出的这点很好。关于封装,有两种理解,一种是狭义的面向对象特性:封装是一种信息隐藏,需要把数据和方法放到一起,而c语言实现的代码,数据和方法是分离的。封装的另一种广义的理解,可以包含你指的封装函数。抽象实际上我们前面章节中也讲到过,比较没有特异性,有的时候不看做面向对象的特性。

    10
    9
  • hudson
    formatToText换成toString是不是更符合习惯?

    作者回复: 会不会有歧义呢?

    3
    5
  • 椿
    文中这一段,“如何给业务建模,如何将需求翻译为类,如何给类之间建立交互关系”,后续会有章节展开简介吗?

    作者回复: 有的 实战篇

    4
    5
  • Jesse
    想问个问题,面向对象语言是不是没有办法直接操作系统资源?而C语言可以,所以C语言成为操作系统的首选语言,是这样吗

    作者回复: 这个也算是个不错的理由。

    4
    4
  • 都市鸽
    go 语言的函数式编程算面向过程吗

    作者回复: 不算,是一种新的编程范式

    1
  • dagecao
    暂时就只有这么几节课吗?啥时候发新的课程呢?

    作者回复: 每周更新三篇

    1
  • xavier
    是否可以这样理解,在例子代码中,将类一层层往下剖析,单独看类中的某个函数方法,可能是面向过程的。但当封装成一个类并使用时,就是面向对象的。

    作者回复: 理解的没错。

    1
  • 初学者
    感觉现在写代码,不是面向对象开发,更感觉像是面向数据库开发

    作者回复: 大部分人都是这个感觉

    2
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部