1.什么是面向对象?什么是对象?面向对象的优缺点、特有属性是什么?
所有编程语言都提供抽象机制,但是抽象的类型和质量不同。人们所能解决问题的复杂度直接取决于抽象的类型和质量。所以,不同类型编程语言所能应对的问题复杂度是不同的。
不同类型编程语言的抽象 | 抽象类型 (抽象的是什么) | 抽象质量 (这种抽象方式所要花费的力气,能解决多大复杂度的问题) |
面向过程 | 机器模型、解空间 根据运行解决方案的计算机来描述问题 | 程序员必须建立起在机器模型(解空间)和实际待解决问题模型(问题空间)之间的关联。建立这种关联是费力的。 |
面向对象 | 实际待解决问题、问题空间 根据问题来描述问题 解空间抽象方式也有很多种,面向对象方式是很好的一种。 | 面向对象方式通过向程序员提供表示问题空间中的元素的工具,使得程序员不会受限于任何特定类型的问题。 思想实质:程序通过添加新类型的对象使自身适用于某个特定问题。 |
总结:为什么要使用面向对象?它典型的适用于哪些情况?又不适用于哪些情况?
当问题的复杂度在面向过程方式可以良好解决的范围时,面向对象体现不出特别的优势。而当问题的复杂度较大,特别是复杂度表现在 需求会出现变化,而软件也不得不随之而变 时,面向过程就不能很好的解决,而需要使用面向对象了。
面向对象对大复杂度的良好解决主要表现在“拥抱变化”:可复用(方便 重复使用 ),可维护(方便 改 ),可扩展(方便 加 )。可复用、可维护、可扩展是同一过程(分离不变和可变)所得到好处的三个方面:将不变和可变分离了,不变部分就可以重复使用,而不会在复用中牵扯进可变部分了;变就是改或者加,分离后再改或者加就不会影响不变部分了。
明白了这些,就知道“面向对象比面向过程好”这种不知所以然的说法错在哪里了。错在没有分具体情况,而一味的说新事物就比旧事物好。新方式的出现往往是为了解决某些旧旧方式无法良好解决的问题,而当在其他方面讨论时就不一定了。比如面向过程一般会比面向对象有更好的性能(待考证)。使用面向对象还是使用面向过程,我们需要根据问题的复杂度、设定的软件质量目标所强调的方面来做综合考虑。
对象:问题空间中的元素及其在解空间的表示。(包括一些无法类比为问题空间元素的对象)。
对象的 接口(对外服务接口) :接口确定了对某一特定对象能发出的请求。
接口的 实现(内部功能实现) :满足这些请求的代码和隐藏的数据一起构成了实现。
依赖倒转原则:针对接口编程,不要针对实现编程。
OO的三个特性(特有属性):
封装、继承、多态。
注 :有说 抽象 也是OO 特性的,这种说法不妥。因为特性就是特有的属性,而“所有编程语言都提供抽象机制,只是抽象的类型和质量不同”,可见抽象不是 OO 的特性。但是要真正理解面向对象是如何“拥抱变化”的,又不得不强调 数据抽象 这个属性。
| 普遍意义 (类、对象本身) | 继承关系 中的意义 | 对OO 分离不变和可变的意义 |
|
数据抽象 | 抽象为接口 | 抽象为基类 | 抽取不变部分 |
|
封装 | 封装为实现 |
| 封装变化 |
|
继承 | --- | 继承为子类 |
|
|
多态 | --- |
| 让不变和可变能顺利连接工作 |
|
OO基本手段:
复用:面向过程中没有复用吗?有的话,与面向对象的复用有何区别?
面向过程的复用:复制代码并加以改变。
面向对象的复用:通过创建新类来复用代码。
面向对象复用的手段有哪些?有何区别?怎样选择?
|
| 选用条件 |
继承 | 复用功能,也复用形式 | 当且仅当要“向上转型”形成多态时 |
组合 (包括代理) | 复用功能,不复用形式 |
|
“向上转型”与继承代换原则:
OO的设计原则
高内聚是基础:
单一职责原则
降低耦合是设计模式的重要工作:
抽象 开闭原则
继承 代换原则
依赖倒转原则
接口隔离原则
聚合/ 组合复用原则
减少依赖原则
需要仔细考虑的原则:
聚合/ 组合复用原则
实现复用的2种方式:组合(包含代理)、继承,我们说优先使用组合来实现复用,而尽量不要使用继承来实现。那么具体何时需要使用继承?何时不能使用继承,而要用组合或代理?
OO的设计模式:
|
|
|
GOF | 主持人 |
|
面向对象先生 | 创始人 | 40多岁 |
可复用、可维护、可扩展 | 大赛精神 |
|
抽象、封装先生、继承、多态女士 | 策划、导演、监制 |
|
设计原则 | 评委 |
|
比赛进程:
1.简单工厂初赛淘汰:
因为不符合开闭原则 à 每一次扩展时,都要改工厂类,即对修改开放。
2.创建型模式 (5->1)
单例、多态工厂、抽象工厂、建造者、原型
工厂方法(多态工厂)晋级:
通常创建型都是从工厂方法开始,当设计者发现需要更大的灵活性时,设计者便会向其他创建型模式演化。
3.结构型模式( 7->2 )被称“死亡之组”
适配器、外观(门面)、桥接、装饰、组合、代理、享元
适配器、外观(门面)晋级:
4.行为型模式 (11->2)
观察者、策略晋级
5强 与 10 强