活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
面向对象
面向对象概述
3种主流编程范式(风格)
- 面向过程
- 面向对象
- 函数式编程
面向对象
- 最主流:流行的编程语言大部分是面向对象编程语言
- 特性丰富:可以实现很多复杂的设计思路,是很多设计原则,设计模式的基础
面向对象4大特性
封装
-
概念:也叫作信息隐藏或者数据访问保护
-
特点:需要编程语言提供权限访问控制语法来支持,例如java中的private、protected、public关键字
-
意义
- 保护数据不被随意修改,提高代码的可维护性
- 仅暴露有限的必要接口,提高类的易用性
抽象
-
概念:隐藏方法的具体实现
-
意义
- 修改实现不需要改变定义
- 处理复杂系统的有效手段,能有效过滤不必要关注的信息
继承
-
概念:表示类之间的is-a关系
-
特性:编程语言需要提供特殊的语法机制来支持
-
2中模式
- 单继承:一个子类只能继承一个父类
- 多继承:一个子类可以继承多个父类
-
意义:解决代码复用问题
多态
- 概念:子类可以替换父类,在实际的代码运行过程中,调用子类的方法实现
- 特性:编程语言需要提供特殊语法机制来支持,比如继承、接口类
- 意义:提高代码的扩展性和复用性,是很多设计模式、设计原则、编程技巧的代码实现基础
面向过程VS面向对象
-
更能应对复杂类型的程序开发
-
具有更加丰富的特性(封装、抽象、继承、多态)
-
更加人性化、更加高级、更加智能
面向对象分析、设计与编程
-
面向对象分析:搞清楚做什么,产出详细的需求描述
-
面向对象设计:搞清楚咋么做,将需求描述转化为具体的类
-
面向对象编程:将分析和设计的结果翻译成代码
接口VS抽象类
-
如果要表示一种is-a的关系,并且是为了解决代码复用问题,就用抽象类
-
如果表示一种has-a关系,并且为了解决抽象而非代码复用问题,就用接口
基于接口而非实现编程
-
将接口和实现相分离,封装不稳定的实现,暴露稳定的接口
-
“基于抽象而非实现编程”,抽象是提高代码扩展性、灵活性、可维护性最有效的手段之一
多用组合少用继承
-
为什么少用继承?
- 继承如果层次过深、过复杂,会影响代码的可维护性
-
组合相比继承的优势:
-
继承的3个作用
-
表示is-a关系
-
支持多态特性
-
代码复用
-
组合能解决层次过深、过复杂的继承关系影响代码可维护性的问题
-
-
-
如何判断使用组合还是继承
- 类之间的继承结构稳定,层次比较浅,关系不复杂就使用继承,反之使用组合
贫血模型VS充血模型
-
基于贫血模型的传统开发模式:面向过程
- 适合业务不复杂的系统开发
-
基于充血模型的ODD开发模式:面向对象
- 适合业务复杂的系统开发
-
两者主要区别在Service层,Controller层和Repository层的代码基本上相同