当前位置:嗨网首页>书籍在线阅读

02-面向对象的编程思想

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.1 面向对象的编程思想

**本节视频教学录像:4分钟**

所有编程语言都提供抽象机制。可以认为,人们所能解决问题的复杂性直接取决于抽象的类型和质量。所谓的“类型”是指“所抽象的是什么”。汇编语言是对底层机器的轻微抽象,而类似FORTRAN、BASIC、C等命令式语言则是对汇编语言的抽象。尽管这些语言相对于汇编语言有了大幅的改进,但它们所做的主要抽象仍要求在解决问题时要基于计算机的结构,而不是所要解决问题的结构来考量。另外一类早起的编程语言则是只针对解决问题,如lisp和apl, 都选择考虑世界的某些特定视图;prolog则将所有的问题都转换成决策链。这些方式对于它们所要解决的特定类型的问题都是不错的解决方案,但如果问题超出其特定领域,它们就力不从心了。

**提示** 面向对象的编程语言不是凭空产生的,而是计算机程序设计语言发展到一定阶段的产物。了解编程语言的历史,也有利于你的学习!

面向对象编程方式通过向程序员提供表示问题空间中的元素的工具而较之其他语言就更进一步了。这种表示方式非常通用,使得程序员不会受限于任何特定类型的问题。将问题空间的元素及其在解空间中的表示称为“对象”。这种思想的实质是:程序可以通过添加新类型的对象使自身适用于某个特定的问题。因此,当阅读描述解决问题方案的代码时,也就阅读了问题的表述。面向对象方式是一种更灵活和更有力的语言抽象,它允许根据问题来描述问题,而不是根据运行解决方案的计算机来描述问题。OOP与计算机的联系是:每个对象看起来都有点像一台微型计算机——它具有状态和操作,而用户可以要求对象执行这些操作。

Anlan Kay曾经总结了第一个成功的面向对象,同时也是C++等所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了一种纯粹的面向对象设计方式。

(1)万物皆为对象。将对象视为奇特的变量,它可以存储数据,除此之外,你可以要求它在自身上执行操作。理论上讲,你可以抽取待求解问题的任何概念化构件(狗、建筑物、服务等),将其表示为程序中的对象。

(2)程序是对象的集合,它们通过发送消息来告知彼此所要做的。要想请求一个对象,就必须向该对象发送一条消息。更具体地说,可以把消息想象为对某个特定对象的方法的调用请求。

(3)每个对象都有自己的由其他对象所构成的存储。换句话说,可以通过创建包含现有对象的包的方式来创建新类型的对象。因此可以在程序中构建复杂的体系,同时将其复杂性隐藏在对象的简单性背后。

(4)每个对象都拥有其类型。按照通用的说法,即“每个对象都是某个类(class)的一个实例(instance)”,这里“类”就是“类型”的同义词。每个类最重要的区别于其他类的特性就是“可以发送什么样的消息给它”。

(5)某个特定类型的所有对象都可以接收同样的消息。这个表述可以用例子来表述为:“圆形”类型的对象同时也是“几何形”类型的对象,所以一个“圆形”对象必定能够接收发送给“几何形”对象的消息。这意味着可以编写与“几何形”交互并自动处理所有与几何形性质相关的事物代码。这种“可替代性”是OOP中最强有力的概念之一。

Booch 对对象提出了一个更加简洁的描述:对象具有状态、行为和标识。这意味着每一个对象都可以拥有内部数据(它们给出了该对象的状态)和方法(它们产生行为),并且每一个对象都可以唯一地与其他对象区分开来,具体来说,就是每一个对象在内存中都有一个唯一的地址。