OO初探

1.什么是面向对象?什么是对象?面向对象的优缺点、特有属性是什么?

所有编程语言都提供抽象机制,但是抽象的类型和质量不同。人们所能解决问题的复杂度直接取决于抽象的类型和质量。所以,不同类型编程语言所能应对的问题复杂度是不同的。

不同类型编程语言的抽象

抽象类型

(抽象的是什么)

抽象质量

(这种抽象方式所要花费的力气,能解决多大复杂度的问题)

面向过程

机器模型、解空间

根据运行解决方案的计算机来描述问题

程序员必须建立起在机器模型(解空间)和实际待解决问题模型(问题空间)之间的关联。建立这种关联是费力的。

面向对象

实际待解决问题、问题空间

根据问题来描述问题

解空间抽象方式也有很多种,面向对象方式是很好的一种。

面向对象方式通过向程序员提供表示问题空间中的元素的工具,使得程序员不会受限于任何特定类型的问题。

思想实质:程序通过添加新类型的对象使自身适用于某个特定问题。

总结:为什么要使用面向对象?它典型的适用于哪些情况?又不适用于哪些情况?

当问题的复杂度在面向过程方式可以良好解决的范围时,面向对象体现不出特别的优势。而当问题的复杂度较大,特别是复杂度表现在 需求会出现变化,而软件也不得不随之而变 时,面向过程就不能很好的解决,而需要使用面向对象了。

面向对象对大复杂度的良好解决主要表现在“拥抱变化”:可复用(方便 重复使用 ),可维护(方便 ),可扩展(方便 )。可复用、可维护、可扩展是同一过程(分离不变和可变)所得到好处的三个方面:将不变和可变分离了,不变部分就可以重复使用,而不会在复用中牵扯进可变部分了;变就是改或者加,分离后再改或者加就不会影响不变部分了。

明白了这些,就知道“面向对象比面向过程好”这种不知所以然的说法错在哪里了。错在没有分具体情况,而一味的说新事物就比旧事物好。新方式的出现往往是为了解决某些旧旧方式无法良好解决的问题,而当在其他方面讨论时就不一定了。比如面向过程一般会比面向对象有更好的性能(待考证)。使用面向对象还是使用面向过程,我们需要根据问题的复杂度、设定的软件质量目标所强调的方面来做综合考虑。

对象:问题空间中的元素及其在解空间的表示。(包括一些无法类比为问题空间元素的对象)。

对象的 接口(对外服务接口) :接口确定了对某一特定对象能发出的请求。

接口的 实现(内部功能实现) :满足这些请求的代码和隐藏的数据一起构成了实现。

依赖倒转原则:针对接口编程,不要针对实现编程。

OO的三个特性(特有属性):

封装、继承、多态。

:有说 抽象 也是OO 特性的,这种说法不妥。因为特性就是特有的属性,而“所有编程语言都提供抽象机制,只是抽象的类型和质量不同”,可见抽象不是 OO 的特性。但是要真正理解面向对象是如何“拥抱变化”的,又不得不强调 数据抽象 这个属性。

普遍意义

(类、对象本身)

继承关系

中的意义

OO 分离不变和可变的意义

数据抽象

抽象为接口

抽象为基类

抽取不变部分

封装

封装为实现

封装变化

继承

---

继承为子类

多态

---

让不变和可变能顺利连接工作

OO基本手段:

复用:面向过程中没有复用吗?有的话,与面向对象的复用有何区别?

面向过程的复用:复制代码并加以改变。

面向对象的复用:通过创建新类来复用代码。

面向对象复用的手段有哪些?有何区别?怎样选择?

选用条件

继承

复用功能,也复用形式

当且仅当要“向上转型”形成多态时

组合

(包括代理)

复用功能,不复用形式

“向上转型”与继承代换原则:

OO的设计原则

高内聚是基础:

单一职责原则

降低耦合是设计模式的重要工作:

抽象 开闭原则

继承 代换原则

依赖倒转原则

接口隔离原则

聚合/ 组合复用原则

减少依赖原则

需要仔细考虑的原则:

聚合/ 组合复用原则

实现复用的2种方式:组合(包含代理)、继承,我们说优先使用组合来实现复用,而尽量不要使用继承来实现。那么具体何时需要使用继承?何时不能使用继承,而要用组合或代理?

OO的设计模式:

GOF

主持人

面向对象先生

创始人

40多岁

可复用、可维护、可扩展

大赛精神

抽象、封装先生、继承、多态女士

策划、导演、监制

设计原则

评委

比赛进程:

1.简单工厂初赛淘汰:

因为不符合开闭原则 à 每一次扩展时,都要改工厂类,即对修改开放。

2.创建型模式 (5->1)

单例、多态工厂、抽象工厂、建造者、原型

工厂方法(多态工厂)晋级:

通常创建型都是从工厂方法开始,当设计者发现需要更大的灵活性时,设计者便会向其他创建型模式演化。

3.结构型模式( 7->2 )被称“死亡之组”

适配器、外观(门面)、桥接、装饰、组合、代理、享元

适配器、外观(门面)晋级:

4.行为型模式 (11->2)

观察者、策略晋级

5强 与  10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值