0%

设计模式之美-设计思想(面向对象)

面向对象

  • 面向对象分析 OOA(Object Oriented Analysis)
  • 面向对象设计 OOD(Object Oriented Design)
  • 面向对象编程 OOP(Object Oriented Programming)

结果:类的设计

  1. 程序被拆解为哪些类
  2. 每个类有哪些属性方法
  3. 类和类之间如何交互

面向对象分析:搞清楚做什么
面向对象设计:搞清楚怎么做
面向对象编程:将分析和设计的结果翻译成代码的过程

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、表示具有某一组行为特性,是为了解决解耦问题,隔离接口和具体的实现,提高代码的扩展性