面向对象编程思想
主流的编程范式、风格有三种,它们分别是面向过程、面向对象(最流行)和函数式编程。
很多复杂的设计思路、设计原则和设计模式的编码实现都依赖于面向对象思想。
重点:
- 面向对象的四大特性:封装、抽象、继承、多态
- 面向对象编程与面向过程编程的区别和联系
- 面向对象分析、设计、编程
- 接口和抽象类的区别以及各自的应用场景
- 基于接口而非实现编程的设计思想
- 多用组合少用继承的设计思想
- 面向过程的贫血模型和面向对象的充血模型
设计原则
设计原则是指导进行代码设计的一些经验总结。这些原则听起来都比较抽象,定义描述都比较模糊,不同的人会有不同的解读。所以,如果单纯地去记忆定义,对于编程、设计能力的提高,意义并不大。对于每一种设计原则,需要掌握它的设计初衷,能解决哪些编程问题,有哪些应用场景。 只有这样,才能在项目中灵活恰当地应用这些原则。
重点:
- SRP 单一职责原则
- OCP 开闭原则
- LSP 里式替换原则
- ISP 接口隔离原则
- DIP 依赖倒置原则
- DRY 原则、KISS 原则、YAGNI 原则、LOD 法则
设计模式
设计模式是针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。大部分设计模式要解决的都是代码的可扩展性问题。理解各种设计模式都能解决哪些问题,掌握典型的应用场景,并且懂得不过度应用。
经典的设计模式有 23 种。随着编程语言的演进,一些设计模式(比如 Singleton)也随之过时,甚至成了反模式,一些则被内置在编程语言中(比如 Iterator),另外还有一些新的模式诞生(比如 Monostate)。
有些模式比较常用,有些模式很少被用到。对于常用的设计模式,要花多点时间理解掌握。对于不常用的设计模式,只需要了解即可。
三大类:
- 创建型 常用的有:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式。 不常用的有:原型模式。
- 结构型 常用的有:代理模式、桥接模式、装饰者模式、适配器模式。 不常用的有:门面模式、组合模式、享元模式。
- 行为型 常用的有:观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式。 不常用的有:访问者模式、备忘录模式、命令模式、解释器模式、中介模式。
编程规范
编程规范主要解决的是代码的可读性问题。 编码规范相对于设计原则、设计模式,更加具体、更加偏重代码细节。最起码要掌握基本的编码规范,比如,如何给变量、类、函数命名,如何写代码注释,函数不宜过长、参数不能过多等。
对于编码规范(比如《重构》《代码大全》《代码整洁之道》等)。每条编码规范都非常简单、非常明确,比较偏向于记忆,只要照着来做可以。它不像设计原则,需要融入很多个人的理解和思考。
重构分为大重构和小重构两种类型,而小重构利用的知识基本上就是编码规范。
介绍一些不好的代码,知道什么样的代码是不符合规范的, 应该如何优化。参照编码规范,可以写出可读性好的代码;参照不好的代码,可以找出代码存在的可读性问题。
代码重构
随着需求的变化,代码的不停堆砌,原有的设计必定会存在这样那样的问题。针对这些问题,就需要进行代码重构。重构是软件开发中非常重要的一个环节。持续重构是保持代码质量不下降的有效手段,能有效避免代码腐化到无可救药的地步。
重构的理论指导就是面向对象设计思想、设计原则、设计模式、编码规范。
使用设计模式可以提高代码的可扩展性,但过度不恰当地使用,也会增加代码的复杂度,影响代码的可读性。在开发初期,除非特别必须,一定不要过度设计,应用复杂的设计模式。而是当代码出现问题的时候,再针对问题,应用原则和模式进行重构。这样就能有效避免前期的过度设计。
重点:
- 重构的目的(why)、对象(what)、时机(when)、方法(how);
- 保证重构不出错的技术手段:单元测试和代码的可测试性;
- 两种不同规模的重构:大重构(大规模高层次)和小重构(小规模低层次)。
掌握一些重构技巧、套路,更重要的是培养持续代码重构的意识,将重构当作开发的一部分。
面向对象编程因为其具有丰富的特性(封装、抽象、继承、多态),可以实现很多复杂的设计思路,是很多设计原则、设计模式等编码实现的基础。
设计原则是指导代码设计的一些经验总结,对于某些场景下,是否应该应用某种设计模式,具有指导意义。比如,“开闭原则”是很多设计模式(策略、模板等)的指导原则。
面向对象、设计原则、设计模式、编程规范、代码重构是多维一体的,都是高质量代码的方法论。比如,在某个场景下,该不该用这个设计模式,那就看能不能提高代码的可扩展性;要不要重构,那就看重代码是否存在可读、可维护问题等。