编译原理实战课
宫文学
北京原点代码 CEO
26066 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
真实编译器解析篇 (19讲)
编译原理实战课
15
15
1.0x
00:00/00:00
登录|注册

38 | 综合实现(一):如何实现面向对象编程?

参考资料
一课一思
实现面向对象的特性
面向对象语言的特性
面向对象编程的实现

该思维导图由 AI 生成,仅供参考

你好,我是宫文学。
从 20 世纪 90 年代起,面向对象编程的范式逐渐成为了主流。目前流行度比较高的几种语言,比如 Java、JavaScript、Go、C++ 和 Python 等,都支持面向对象编程。
那么,为了支持面向对象编程,我们需要在语言的设计上,以及编译器和运行时的实现上,考虑到哪些问题呢?
这一讲,我就带你来探讨一下如何在一门语言里支持面向对象特性。这是一个很综合的话题,会涉及很多的知识点,所以很有助于帮你梳理和贯通与编译原理有关的知识。
那么,我们就先来分析一下,面向对象特性都包括哪些内容。

面向对象语言的特性

日常中,虽然我们经常会使用面向对象的语言,但如果要问,到底什么才是面向对象?我们通常会说得含含糊糊。最常见的情况,就是会拿自己所熟悉的某种语言的面向对象特性,想当然地认为这就是面向对象语言的全部特性。
不过,在我们的课程里,我想从计算机语言设计的角度,带你重新梳理和认识一下面向对象的编程语言,把面向对象按照清晰的逻辑解构,这样也便于讨论它的实现策略。在这个过程中,你可能会对面向对象产生新的认识。

特征 1:对象

面向对象编程语言的核心,是把世界看成了一个个的对象,比如汽车、动物等。这些对象包含了数据和代码。数据被叫做字段或属性,而代码通常又被叫做是方法。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了面向对象编程的实现方法,包括编译器前端的工作、对象的内存布局设计以及多态情况下方法绑定的实现方法。文章详细讨论了静态绑定和动态绑定的概念,以及动态绑定在Java和C++中的实现机制。此外,还探讨了如何实现让一切数据都表达为对象,包括自动装箱和拆箱的功能。通过本文,读者可以深入了解面向对象编程的概念和实现细节,对于想要深入了解面向对象编程的技术人员具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《编译原理实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • kkxue
    就Python而言,要不就抛弃掉类和类继承那一套吧,语言就会简化很多: 类使用结构体来实现,类继承就像GO一样使用组合模式(python也是推荐MIXIN)。

    作者回复: 我是这么看的,计算机语言(设计)和编译技术是两个不同的领域,虽然互相有关联。 它们有点像中国老话说的“文无第一,武无第二”的关系。编译技术是武,因为编译速度、目标代码的速度这些是硬指标,可以很容易测试出来。但计算机语言是文,有点像大家针对艺术的态度,有的人喜欢国画,有人说油画好,很难比较。 所以,计算机语言的设计更难,很难讨得所有人的喜欢。有人喜欢函数式,就有人喜欢命令式;有人喜欢继承,有人就喜欢Mixin。很难用严格的推理,证明哪个更好。

    2021-03-04
    2
    4
  • Treasure
    多态 就是面向对象的核心特征之一吧?Go 也是面向对象的,废弃了class的概念,采用c的struct 数据结构,ho的多态感觉是一种面相连接的概念,谁要真的 实现了 “父类” 的方法,那么该对象就是可以用以多态。

    作者回复: 多态有很多种实现机制。从概念上来说,你在程序语言里用同样的函数或方法名称,对应多个不同的实现,都叫多态。 比如,函数的重载(函数名称相同、参数个数或类型不同)是多态;泛型也是一种多态,叫做参数化多态;等等。

    2020-10-01
  • Geek_53ae34
    是一个子类对应一个虚函数表,还是一个对象对应一个虚函数表呢?
    2021-12-25
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部