第1章 对象导论

来源:互联网 发布:网页设计软件排名 编辑:程序博客网 时间:2024/04/29 22:53

这一章是对面向对象编程思想的一个概括的介绍,让我们了解其特性和一些思路,在这里摘要重要的语句作为小结。


面向对象程序设计(Object-oriented Programming,OOP是一种计算机编程架构。OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。

做个比喻:每个对象看起来都有点像一台微型计算机——它具有状态,还具有操作,用户可以要求对象执行这些操作。

1.1 基本特性

一种纯粹的面向对象程序设计方式会有什么样的特点呢?

来看看下面总结的五大特性

1.万物皆为对象

2.程序是对象的集合,它们通过发送消息来告知彼此所要做的

3.每个对象都有自己的有其他对象所构成的存储

4.每个对象都拥有其类型

5.某一特定类型的所有对象都可以接收同样的消息

——Alan Kay

更加简洁的描述:Booch:对象具有状态(内部数据)、行为(方法)和标识(唯一的地址)。

1.2 每个对象都有一个接口

接口(Interface)确定了对某一个对象所能发出的请求,每个对象都会有一个接口,这是实现对象与外界关联的方式。

1.3 每个对象都提供服务

在开发和理解一个程序设计时,最好的方式是将对象想象为“服务提供者”。思考什么样的对象能够解决我的问题?如果需要自己实现不存在的对象,它看起来是什么样子的?它提供哪些服务?它需要利用哪些对象?这种方式的好处在于:

1. 方便将问题分解为对象的集合。

2. 有助于提高对象的内聚性。(高内聚是软件设计的基本质量要求之一:通俗来说就是:每个对象都可以很好的完成一项任务,但它不尝试去做更多的事。)

1.4  被隐藏的具体实现

程序开发人员可以分为两类:类创建者(创建数据类型的程序员)和客户端程序员(在其应用中使用数据类型的类消费者)。

类创建者在创建类的时候,对类只暴露必要的部分,而隐藏具体实现是很有意义的一件事情,这也是访问控制存在的原因:

1. 让客户端程序员无法触及他们不应该触及的部分,对必需但不作为客户端程序员需要用到的接口的内部操作加以隐藏。可以让客户端程序员明白那些东西是重要的,那些东西可以忽略。

2. 允许库设计者可以改变内部的工作方式,而不用担心会影响客户端程序员。即方便我们所说的“重构”的实现。

*:就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性

*UMLUnified Modelling Language,统一建模语言)图:每个类都用一个方框表示,类名在顶部,数据成员在中间,方法在底部。中间和底部可以省略。

1.5 复用具体实现

代码复用是面向对象语言最了不起的优点之一。

组合(has-a)或者继承(is-a)都是复用的方法。在考虑复用的时候,应该首先考虑组合,因为它更加简单灵活,在必需使用继承的场合再使用继承。

1.6 继承

继承的意义在于:以现有类为基础,通过添加和修改创建出新的类。

新的类型不仅包括现有类型的所有成员(尽管private成员不可见),而且复制了基类的接口。

导出类与基类具有相同的类型。所以可以发送给基类对象的消息同时也可以发送给导出类对象。

使基类和导出类产生差异的方法有两种:

1. 添加新方法

2. 覆盖原有的方法

is-a和 is-like-a:

is-a:只覆盖基类的方法而不添加新方法。

is-like-a:添加新方法。

1.7 伴随多态的可互换对象

有时我们希望把一个对象不是当成特定的类型,而是当成其基类对象来对待。这种将导出类看作它的基类的过程称为上转型。

在对这个对象执行某个方法时,我们只有到运行的时候才确定哪些代码被调用,这就是“后期绑定”。

在某些语言中,必须明确地声明希望某个方法具备后期绑定属性所带来的灵活性(C++是使用virtual关键字来实现的)。在这些语言中,方法在默认情况下不是动态绑定的。而在Java中,动态绑定是默认行为,不需要添加额外的关键字来实现多态。 

1.8 单根继承结构

Java中所有的类都继承自同一个基类,这个基类的名字就是Object。单根继承结构有许多的好处:保证了所有的对象都具备某些功能,因此可以在每个对象上执行某些基本的操作,所有对象都可以很容易地在堆上创建,参数传递也得到了极大的简化。Java的垃圾回收器就是基于单根继承结构才得以实现的。

1.9 容器

Java的标准库中包含了大量的容器,不同的容器提供了不同类型的接口和外部行为,不同容器对于某些操作具有不同的效率。

范型(参数化类型),对创建的容器指定保存对象的类型,以此来避免下转型的不安全。


1 0