后端技术面试38讲
李智慧
同程艺龙交通首席架构师,前Intel&阿里架构师,《大型网站技术架构》作者
立即订阅
3774 人已学习
课程目录
已更新 19 讲 / 共 38 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 掌握软件开发技术的第一性原理
免费
软件的基础原理 (8讲)
01丨程序运行原理:程序是如何运行又是如何崩溃的?
02丨数据结构原理:Hash表的时间复杂度为什么是O(1)?
03丨Java虚拟机原理:JVM为什么被称为机器(machine)?
04丨网络编程原理:一个字符的互联网之旅
05丨文件系统原理:如何用1分钟遍历一个100TB的文件?
06丨数据库原理:为什么PrepareStatement性能更好更安全?
07丨编程语言原理:面向对象编程是编程的终极形态吗?
答疑丨Java Web程序的运行时环境到底是怎样的?
软件的设计原理 (9讲)
08丨软件设计的方法论:软件为什么要建模?
09丨软件设计实践:如何使用UML完成一个设计文档?
10 | 软件设计的目的:糟糕的程序员比优秀的程序员差在哪里?
11丨软件设计的开闭原则:如何不修改代码却能实现需求变更?
12 | 软件设计的依赖倒置原则:如何不依赖代码却可以复用它的功能?
13丨软件设计的里氏替换原则:正方形可以继承长方形吗?
14 | 软件设计的单一职责原则:为什么说一个类文件打开最好不要超过一屏?
15丨软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法?
16 | 设计模式基础:不会灵活应用设计模式,你就没有掌握面向对象编程
不定期加餐 (1讲)
加餐 | 软件设计文档示例模板
后端技术面试38讲
登录|注册

16 | 设计模式基础:不会灵活应用设计模式,你就没有掌握面向对象编程

李智慧 2019-12-27
我在面试的时候,喜欢问一个问题:“你比较熟悉哪些设计模式?”得到的回答很多时候是“单例”和“工厂”。老实说,这个回答不能让人满意。因为在我看来,单例和工厂固然是两种经典的设计模式,但是,这些创建类的设计模式并不能代表设计模式的精髓。
设计模式的精髓在于对面向对象编程特性之一——多态的灵活应用,而多态正是面向对象编程的本质所在。

面向对象编程的本质是多态

我在面试时,有时候会问“什么是对象”,得到的回答各种各样:“对象是数据与方法的组合。”“对象是领域的抽象。”“一切都是对象。”“对象的特性就是封装、继承、多态。”
这是一个比较开放的问题,这些回答可以说都是对的,都描述了对象的某个方面。那么,面向对象的本质是什么?面向对象编程和此前的面向过程编程的核心区别是什么?
我们常说,面向对象编程的主要特性是封装、继承和多态。那么这三个特性是否是面向对象编程区别于其他编程技术的关键呢?
我们先看封装,面向对象编程语言都提供了类的定义。通过类,我们可以将类的成员变量和成员方法封装起来,还可以通过访问控制符,private、protected、public 控制成员变量和成员方法的可见性。
面向对象设计最基本的设计粒度就是类。类通过封装数据和方法,构成一个相对独立的实体。类之间通过访问控制的约束互相调用,这样就完成了面向对象的编程。但是,封装并不是面向对象编程语言独有的。面向过程的编程语言,比如 C 语言,也可以实现封装特性,在头文件.h 里面定义方法,而在实现文件.c 文件里定义具体的结构体和方法实现,从而使依赖.h 头文件的外部程序只能够访问头文件里定义过的方法,这样同样实现了变量和函数的封装,以及访问权限的控制。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《后端技术面试38讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(2)

  • 蓝魔丶
    每个子类构造函数传入父类实现组合,通过递归获取父类
    2019-12-27
    1
  • 尹宗昌
    无招胜有招
    2019-12-27
收起评论
2
返回
顶部