38 | 综合实现(一):如何实现面向对象编程?
宫文学
该思维导图由 AI 生成,仅供参考
你好,我是宫文学。
从 20 世纪 90 年代起,面向对象编程的范式逐渐成为了主流。目前流行度比较高的几种语言,比如 Java、JavaScript、Go、C++ 和 Python 等,都支持面向对象编程。
那么,为了支持面向对象编程,我们需要在语言的设计上,以及编译器和运行时的实现上,考虑到哪些问题呢?
这一讲,我就带你来探讨一下如何在一门语言里支持面向对象特性。这是一个很综合的话题,会涉及很多的知识点,所以很有助于帮你梳理和贯通与编译原理有关的知识。
那么,我们就先来分析一下,面向对象特性都包括哪些内容。
面向对象语言的特性
日常中,虽然我们经常会使用面向对象的语言,但如果要问,到底什么才是面向对象?我们通常会说得含含糊糊。最常见的情况,就是会拿自己所熟悉的某种语言的面向对象特性,想当然地认为这就是面向对象语言的全部特性。
不过,在我们的课程里,我想从计算机语言设计的角度,带你重新梳理和认识一下面向对象的编程语言,把面向对象按照清晰的逻辑解构,这样也便于讨论它的实现策略。在这个过程中,你可能会对面向对象产生新的认识。
特征 1:对象
面向对象编程语言的核心,是把世界看成了一个个的对象,比如汽车、动物等。这些对象包含了数据和代码。数据被叫做字段或属性,而代码通常又被叫做是方法。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了面向对象编程的实现方法,包括编译器前端的工作、对象的内存布局设计以及多态情况下方法绑定的实现方法。文章详细讨论了静态绑定和动态绑定的概念,以及动态绑定在Java和C++中的实现机制。此外,还探讨了如何实现让一切数据都表达为对象,包括自动装箱和拆箱的功能。通过本文,读者可以深入了解面向对象编程的概念和实现细节,对于想要深入了解面向对象编程的技术人员具有很高的参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《编译原理实战课》,新⼈⾸单¥59
《编译原理实战课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- kkxue就Python而言,要不就抛弃掉类和类继承那一套吧,语言就会简化很多: 类使用结构体来实现,类继承就像GO一样使用组合模式(python也是推荐MIXIN)。
作者回复: 我是这么看的,计算机语言(设计)和编译技术是两个不同的领域,虽然互相有关联。 它们有点像中国老话说的“文无第一,武无第二”的关系。编译技术是武,因为编译速度、目标代码的速度这些是硬指标,可以很容易测试出来。但计算机语言是文,有点像大家针对艺术的态度,有的人喜欢国画,有人说油画好,很难比较。 所以,计算机语言的设计更难,很难讨得所有人的喜欢。有人喜欢函数式,就有人喜欢命令式;有人喜欢继承,有人就喜欢Mixin。很难用严格的推理,证明哪个更好。
2021-03-0424 - Treasure多态 就是面向对象的核心特征之一吧?Go 也是面向对象的,废弃了class的概念,采用c的struct 数据结构,ho的多态感觉是一种面相连接的概念,谁要真的 实现了 “父类” 的方法,那么该对象就是可以用以多态。
作者回复: 多态有很多种实现机制。从概念上来说,你在程序语言里用同样的函数或方法名称,对应多个不同的实现,都叫多态。 比如,函数的重载(函数名称相同、参数个数或类型不同)是多态;泛型也是一种多态,叫做参数化多态;等等。
2020-10-01 - Geek_53ae34是一个子类对应一个虚函数表,还是一个对象对应一个虚函数表呢?2021-12-25
收起评论