1.2 面向对象的基本思想
面向对象方法已深入到计算机软件领域的几乎所有分支。它不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系,用什么观点来研究问题并进行问题求解,以及如何进行软件系统构造的软件方法学。因而,面向对象方法有着自己的基本思想。
面向对象方法解决问题的思路是从现实世界中的客观对象(如人和事物)入手,尽量运用人类的自然思维方式从不同的抽象层次和方面来构造软件系统,这与传统开发方法构造系统的思想是不一样的。特别是,面向对象方法把一切都看成是对象。下面以开发一个开发票的软件为例来说明这种观点。发票的样本如图1.1所示。
按非面向对象思路,要定义数据结构(如C中的结构或Pascal中的记录)以及编写根据数据结构进行计算的函数或过程。而按面向对象思路,先把发票看成一个对象,其中有若干属性,如编号、名称和规格等,还有若干操作,如计算一种商品金额的操作“单项金额计算”和计算金额合计的操作 “发票金额合计”,然后再根据具体编程语言考虑怎样实现这个对象。
人们已经形成共识:面向对象方法是一种运用对象、类、继承、聚合、关联、消息和封装等概念和原则来构造软件系统的开发方法。下面具体地阐述面向对象方法的基本思想:
1)客观世界中的事物都是对象(object),对象间存在一定的关系。面向对象方法要求从现实世界中客观存在的事物出发来建立软件系统,强调直接以问题域(现实世界)中的事物以及事物间的联系为中心来思考问题和认识问题,并根据这些事物的本质特征和系统责任,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。这可以使系统直接映射到问题域,保持问题域中的事物及其相互关系的本来面貌。
2)用对象的属性(attribute)表示事物的数据特征;用对象的操作(operation)表示事物的行为特征。
3) 对象把它的属性与操作结合在一起,成为一个独立的、不可分的实体,并对外屏蔽它的内部细节。
4)通过抽象对事物进行分类。把具有相同属性和相同操作的对象归为一类,类(class)是这些对象的抽象描述,每个对象是它的类的一个实例。
5) 复杂的对象可以用简单的对象作为构成部分。
6) 通过在不同程度上运用抽象原则,可以得到较一般的类和较特殊的类。特殊类继承一般类的属性与操作。
7) 对象之间通过消息进行通信,以实现对象之间的动态联系。
8) 通过关联表达类之间的静态关系。
图1.2为上述部分思想的一个示意图。
利用抽象原则从客观世界中发现对象以及对象间的关系,其中包括整体对象和部分对象,进而再把对象抽象成类,把对象间的关系抽象为类之间的关系。通过继续运用抽象原则,确定类之间存在的继承关系。上述简略地说明了建立系统的静态结构模型的思想,系统其他模型的建立原则也与此类似,这些内容将是本书讲述的重点。通过以图形的方式作为建模的主要方式之一,分别建立系统的分析与设计模型,进而得到可运行的程序。正是通过面向对象建模,对所要解决的问题有了深刻且完整的认识,进而把其转换成可运行的程序,使得程序所处理的对象是对现实世界中对象的抽象。
从上述可以看出,面向对象方法强调充分运用人类在日常逻辑思维中经常采用的思想方法与原则,如抽象、聚合、封装和关联等。这使得软件开发者能更有效地思考问题,并以其他人也能看得懂的方式把自己的认识表达出来。为了更全面和清楚地表达认识,面向对象方法要用多种图来详述模型,即从多方面来刻画模型。像一些开发方法一样,面向对象方法也要求从分析、设计和实现等不同抽象层次(开发阶段)来开发复杂的软件系统。
面向对象方法也是多种多样的,尽管各种面向对象方法不同,但都是以上述基本思想为基础的。还要指出的是,一种方法要包含一组概念和相应的表示法以及用其构造系统的过程指导,面向对象方法也不例外。贯穿于本书的面向对象概念及表示法均取自UML 24;至于过程指导,国内外尚无统一标准,本书给出的是基于特定活动而组织的,其特点是易学易用,且不失应用的普遍性。