31|面向对象编程第3步:支持继承和多态
宫文学
你好,我是宫文学。
经过前面两节课对面向对象编程的学习,今天这节课,我们终于要来实现到面向对象中几个最核心的功能了。
面向对象编程是目前使用最广泛的编程范式之一。通常,我们说面向对象编程的核心特性有封装、继承和多态这几个方面。只要实现了这几点,就可以获得面向对象编程的各种优势,比如提高代码的可重用性、可扩展性、提高编程效率,等等。
这节课,我们就先探讨一下面向对象的这些核心特性是如何实现的,然后我会带着你动手实现一下,破解其中的技术秘密。了解了这些实现机制,能够帮助你深入理解现代计算机语言更深层次的机制。
首先,我们先来分析面向对象的几个核心特性,并梳理一下实现思路。
面向对象的核心特性及其实现机制
第一,是封装特性。
封装是指我们可以把对象内部的数据和实现细节隐藏起来,只对外提供一些公共的接口。这样做的好处,是提高了代码的复用性和安全性,因为内部实现细节只有代码的作者才能够修改,并且这种修改不会影响到类的使用者。
其实封装特性,我们在上两节课已经差不多实现完了。因为我们提供了方法的机制,让方法可以访问对象的内部数据。之后,我们只需要给属性和方法添加访问权限的修饰成分就可以了。比如我们可以声明某些属性和方法是 private 的,这样,属性和方法就只能由内部的方法去访问了。而对访问权限的检查,我们在语义分析阶段就可以轻松做到。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
面向对象编程是一种广泛应用的编程范式,其核心特性包括封装、继承和多态。本文深入探讨了这些特性在编译器前端和AST解释器中的具体实现细节。封装通过隐藏对象内部数据和实现细节,提高了代码的复用性和安全性。继承允许子类免费获得父类的属性和方法,降低了开发工作量,提高了代码的复用度。多态允许不同子类实现共同方法的不同表现,在抽象层面上编程,降低了系统的维护成本。文章还讨论了在编译器前端和AST解释器中对继承和多态特性的支持,包括语法规则的增强和语义分析工作。特别强调了在AST解释器中实现继承和多态的关键点,以及在运行时绑定的原则和实现机制。这些内容有助于读者深入理解面向对象编程的实现机制,提高编程水平。文章还通过C++示例程序和汇编代码展示了继承和多态的实现机制,以及vtable的原理和动态绑定的实现方式,为读者提供了直观的实例和代码分析。文章内容丰富,深入浅出,对于想深入了解面向对象编程实现机制的读者具有很高的参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》,新⼈⾸单¥59
《手把手带你写一门编程语言》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(8)
- 最新
- 精选
- 奋斗的蜗牛类型系统改成Structural,用vtable的话,应该要保证函数在所有类型的vtable的位置都是一样的2021-10-261
- ifelse学习打卡2022-09-28归属地:浙江
- jack123为什么汇编里面生成的Cat对象是24字节呢? 它父类一个double 子类一个double这里不是只有16bit吗?还要算2个虚指针大小吗?2021-11-21
- 写点啥呢请教宫老师,asm_x86-64视线中,vistiFunctionCall对于super()这种调用是不做任何生成代码操作,我理解次数是应该去变成一次对父类constructor函数的调用,请问对么?2021-10-29
- 写点啥呢请问宫老师,asm_x86-64实现中,使用类的vtable作为PlayObject实例的头部,代码中各个类的vtable是如何产生的呢?在代码里没有看到,请指点下,谢谢2021-10-29
- D把静态编译语言的多态实现机制也讲解到了,宫老师讲的很好啊! golang 的interface 的机制也借鉴了C++的vtable 实现机制,有些类似。2021-10-27
- chris关于实现多态的其他方式, hotspot有一个inline cache优化, 不知道能不能算.2021-10-27
- 奋斗的蜗牛太赞了,原来这些高级特性是这么实现的2021-10-26
收起评论