表面来看,面向对象(OO)这个术语的意思是,把软件组织成一系列离散的、合并了数据结构和行为的对象。这与以前的开发方法中数据结构和行为只是松散关联是不同的。关于OO方法究竟需要哪些特征,人们还有争议,但大体上它们都包含标识(identity)、分类(classification)、继承(inheritance)和多态(polymorphism)四个方面。

标识的意思是指,数据被量化成为对象(object)的离散的、可辨识的实体。每个对象都有它自己的内部标识。换句话说,即使所有的属性值(例如姓名和大小)都相同,两个对象也是有差别的。

在现实世界中,对象只是一种简单的存在,但在编程语言中,每个对象都有一个唯一的句柄,借助这个句柄就可以引用对象。不同的语言实现句柄的方式不同,例如地址、数组下标或认为编号。这样的对象引用是一致并且独立与对象内容的,运行创建混合的对象集合,例如同时包含文件和子目录的文件系统目录。

分类指的是有着相同数据结构(属性)和行为(操作)的对象被分组为一个类。类是一种抽象,描述对于一项应用来说很重要的属性,并且忽略其余属性,类的选择是随意的,视应用而定。

每个类都描述了由各个对象组成的无限集合。每个对象都是改类的一个实例(instance)。对于每种属性,对象都有其自己的取值,但会和此类的其他实例共享属性和操作。

继承指的是多个类基于一种分层关系,共享类间属性和操作(合成特征)。父类(super-class)拥有子类(subclass)提炼和详细说明的通用信息。每个子类包含(或称继承)其父类全部的特征,再加上它自己所特有的特征。字类不需要重复其父类的特征。把几个类的公共特征提取出来组成一个父类,这种功能可以大大减少设计和程序内部的重复劳动,这是OO技术的一项主要优点。

多态是指对于不同的类来说,相同的操作会有不同的动作。操作是对象执行或被执行的一个过程或转换。由特定类实现的操作被成为方法(method)。因为OO操作符是多态的,所以它可能会有多种方法,对于不同对象的类来说,每一个都会有一种实现方法。

在现实世界中,操作只不过是不同的对象之间相似行为的一种抽象。每种对象“知道如何”执行它自己的操作。然而,在OO编程语言中,基于操作名和被操作对象的类,语言会自动选择正确的方法来现实操作。操作的用户不需要知道多少种方法实现了给定的多态操作。

分类: 软件工程