面向对象
- 面向对象分析 OOA(Object Oriented Analysis)
- 面向对象设计 OOD(Object Oriented Design)
- 面向对象编程 OOP(Object Oriented Programming)
结果:类的设计
- 程序被拆解为哪些类
- 每个类有哪些属性方法
- 类和类之间如何交互
面向对象分析:搞清楚做什么
面向对象设计:搞清楚怎么做
面向对象编程:将分析和设计的结果翻译成代码的过程
UML 使用
图
- 类图
- 用例图
- 顺序图
- 活动图
- 状态图
- 组件图
类间关系
- 泛化
- 实现
- 关联
- 聚合
- 组合
- 依赖
- …
面向对象-封装、抽象、继承、多态
| - | 封装 | 抽象 | 继承 | 多态 |
|---|---|---|---|---|
| 对象 What |
隐藏信息 保护数据访问 |
隐藏具体实现 使用者只需关心功能 无需关心实现 |
表示 is-a 关系 分为单继承和多继承 |
子类替换父类 在运行时调用子类的实现 |
| 方法 How |
暴露有限接口和属性 需要编程语言提供访问控制的语法 |
通过接口类或者抽象类实现 特殊语法机制非必须 |
需要编程语言提供特殊语法机制 例如 Java 的 “extends”, C++ 的 “:” |
需要编程语言提供特殊的语法机制 比如继承、接口类、duck-typing |
| 目的 Why |
提高代码可维护性 降低接口复杂度,提高类的易用性 |
提高代码的扩展性、维护性 降低复杂度,减少细节负担 |
解决代码复用问题 | 提高代码扩展性和复用性 |
只读
只读列表
Collections.unmodifiableList()
面向过程
Constants:拆解为功能更加单一的类,否则会导致依赖类的重新编译
Utils:只包含静态方法
MVC:(基于贫血模型的开发模式)
充血模型
边界清晰(耦合低)、功能内敛(高内聚)
抽象&&接口
| - | 抽象 | 接口 |
|---|---|---|
| 定义 What | 1、不允许实例化,只能被继承 2、可包含属性和方法,包含抽象方法 3、子类继承抽象类必须重写抽象方法 |
1、具有某些功能,或称为协议(contract) 2、不允许实例化,只能被实现 3、不包含属性和普通方法,只声明方法,default 方法 4、类实现接口时,必须实现声明中的所有方法 |
| 方法 how | abstract-extends | interface-implements |
| 目的 Why | 解决复用问题,适用于 is-a 的关系 | 1、解决方法抽象问题,适用于 has-a 的关系 2、表示具有某一组行为特性,是为了解决解耦问题,隔离接口和具体的实现,提高代码的扩展性 |