对象导论笔记-第一天

08/14/2011

计算机革命起源于机器,因此,编程语言的产生也始于对机器的模仿。但是计算机并非是机器那么简单。计算机是头脑延伸的工具,同时还是一种不同类型的表达媒体。因此,这种工具看起来已经越来越不像机器,而更像我们头脑的一部分。面向对象程序设计(Object-oriented Programming,OOP)便是这种以计算机作为表达媒体的大趋势众的组成部分。

1.1抽象过程

汇编语言是对底层机器的轻微抽象。接着出现的“命令式”语言(C等)都是对汇编语言的抽象。这些语言在汇编语言基础上有了大幅的改进,但是它们所作的主要抽象仍然要求在解决问题时要基于计算机的结构,而不是基于所要解决问题的结构来考虑.程序员必须建立起在机器模型十几待解决问题的模型之间的联系。

面向对象方式(OOP)使得程序员不会受限于任何特定类型的问题。我们将问题空间的元素及其在解空间众的表示称为“对象”。(OOP)允许根据问题来描述问题,而不是根据运行解决方案的计算机来描述问题。

Alan Kay曾经总结了面向对象语言的五个基本特性。

  1. 万物皆为对象
  2. 程序是对象的集合,它们通过发送消息来告知彼此所要做的
  3. 每个对象都有自己的由其他对象所构成的存储
  4. 每个对象都拥有其类型
  5. 某一特定类型的所有对象都可以接收同样的消息

Booch对对象提出了一个更加简洁的描述:对象具有状态,行为,标示

1.2每个对象都有一个接口

创建抽象数据类型(类 class)是面向对象程序设计的基本概念之一。因为类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以一个类实际上就是一个数据类型,程序员通过定义类来适应问题,而不再被迫只能使用现有的用来表示机器中的存储单元的数据类型。

怎样才能获得有用的对象呢?必须有某种方式产生对对象的请求。每个对象都只能满足某些请求,这些请求由对象的接口(interface)所定义,决定接口的便是类型。

1.3每歌对象都提供服务

当正在试图开发和理解一个程序设计时,最好的方法之一就是将对象想象微“服务提供者”。这样做的好处:它有助于提高对象的內聚性

在良好的面向对象设计中,每个对象都可以很好的完成一项人物,但是它并不试图做更多的事。

1.4被隐藏的具体实现

将程序开发人员按照角色分为类创建者客户端程序员。类创建者的目标是构建类,这种类只向客户端程序员暴露必须的部分,而隐藏其他部分。

  1. 访问控制的第一个存在原因就是让客户端程序员无法触及他们不应该触及的部分
  2. 访问控制的第二个存在原因就是允许库设计者可以改变类内部的工作方式而不用担心会影响客户端程序员

Java用三个关键字在类的内部设定边界:public,private,protected

Java还有一种默认的访问权限,这种权限通常被称为包访问权限因为在这种权限下,类可以访问在同一个包(库构件)中的其他类成员,但是在包之外,这些成员如同指定了 private 一样。

1.5复用具体实现

代码复用是面向对象程序设计语言所提供的最了不起的优点之一

  1. 最简单的复用某歌类的方式就是直接使用该类的一个对象
  2. 此外也可以将那个类的一个对象置于某个新的类众,因为是在使用现有的类组合成新的类,所以这种概念被称为组合(composition)

由于继承在面向对象程序设计众如此重要,所以它经常被过分高度强调。实际上,在建立新类时,应该首先考虑组合,因为它更加简单灵活。