面向对象程序设计方法
面向对象五大基本特征
- 万物皆对象。理论上讲, 你总是可以从要解决的问题上抽象出概念性的组件,然后在程序中将其表示为一个对象。
- 程序是一组对象,通过消息传递来告知彼此该做什么。要请求调用一个对象的方法,需要向该对象发送消息。
- 每个对象都有自己的存储空间,可以容纳其他对象。或者说,通过封装现有的对象,可以制作新的对象。 所以,尽管对象的概念非常简单,但是在程序中却可以达到任意高的复杂度。
- 每个对象都有一种类型。根据语法,每个”对象“都是某一个“类型”的一个“实例”。一个类最重要的特性就是“能将什么消息发给它?”。
- 同一类所有对象都能接收相同的消息。这与第四条中类的最重要特性自洽。
什么是对象?
一个对象具有自己的状态,行为和标识。这意味着对象有自己的内部数据(提供状态)、方法(产生行为)、并彼此区分(每个对象在内存中具有唯一地址)。
当我们在进行面向对象的程序设计时, 面临的最大一项挑战是:如何在“问题实际存在的地方”的元素与“对实际问题进行建模的地方”的元素之间建立理想的“一对一”的映射关系
接口
每个对象都能接受特定的请求。我们向对象发出的请求是通过它的“接口interface”定义的。
对象的“类型”规定了它的接口形式。
“类型”与“接口”的对应关系是面向对象程序设计的基础。
服务提供
在开发或者理解程序设计时, 我们可以将对象看成是“服务提供者”,最终目标是开发或调用一些对象,提供理想的服务来解决问题。
我们将待解决的问题一一分解, 抽象成一组服务。 软件设计的基本原则是高内聚(每个组件的内部作用明确,功能紧密相关)。
在良好的面向对象设计中, 每个对象的功能单一且高校。
封装
封装就是将具体的内部实现隐藏起来。让使用者只能访问暴露的消息。
复用
一个类经创建和测试后,理论上是可复用的。
代码和设计方案的复用性是面向对象程序设计的优点之一。我们可以通过重复使用某个类的对象来达到复用性。
这里涉及“组合”与“聚合”
- 组合:表示拥有关系,A拥有B,比如一个对象把另一个对象作为了自己的一个成员变量
- 聚合:表示接触、使用,A使用B,比如一个对象在他的方法中接受并使用了另一个对象
继承
当一个类与另一个新的类具有相似的功能时,可以利用原来的类进行继承,然后在根据情况稍作修改。
多态
不同对象所属同一个基类,这些对象都能执行基类定义的方法。 这也可以通过派生新的类,来扩展程序。