抽象机制:所有编程语言都提供抽象机制
汇编语言是对底层机器的轻微抽象,“命令式”语言则是对汇编语言的轻微抽象,“命令式”语言在汇编语言的基础上有了大幅的改进,但是它们所主要的抽象依旧要求在解决问题时基于计算机的结构,而不是基于所要解决的问题结构来考虑,程序员必须建立起在机器模型和实际待解决问题的模型之间的关联。
面向对象方式通过向程序员提供表示问题空间中的元素的工具而更进了一步,这使得程序员不会受限于任何特定类型的问题,我们将问题空间中的元素及其在机械模型中的表示称为“对象”。所以程序员可以通过添加新类型的对象使自身适用于某个特定问题。
. . .
对象这种观念,本身就是十分方便的工具,使得你可以通过概念将数据和功能封装到一起,因此可以对问题空间的观念给出恰当的表示,而不用受制于必须使用底层机器语言。这些概念用关键字class来表示,它们形成了编程语言中的基本单位。
但是,这样还是有很多麻烦:在创建了一个类后,即使另一个新类与其具有相似的功能,你还是得重新创建一个新类。如果我们能够以现有的类为基础复制它,然后通过添加和修改这个副本来创建新类那就要好多了。通过继承便可以达到这样的效果,不过也有例外,当父类发生变动时,被修改的“副本”(子类)也会反映出这样变动。
类型不仅仅只是描述了作用于一个对象集合上的约束条件,同时还有与其他类型之间的关系(组合、继承..)。两个类型可以有相似的特性和行为,但是其中一个类型可能比另一个含有更多的特性,并且拥有更多的行为(或处理更多的消息)。继承使用父类和子类的概念表示出了这种类型之间的相似性。一个父类包含其所有子类型所共享的特性和行为,从基类型中导出其他类型,来表示此核心可以被实现的各种不同方式。
以垃圾回收为例,“垃圾是父类”,每一件垃圾都有重量、价格等特性,可以被分解、熔化...。在此基础上可以通过添加额外的特性(如瓶子有颜色)或行为(铝瓶可以被压碎)导出更具体的垃圾类型,此外某些行为可能不同。可以通过继承来构建一个类型层次结构,以此来表示待求解决的某种类型问题。
fip
|
|