1.3 面向对象程序设计
面向对象程序设计(Object—Oriented Programming,简称OOP)是20世纪80年代发展起来的一种程序设计方法。它通过模拟现实世界中的事物和关系,利用抽象、分类、归纳等方法来构造软件系统。
在面向对象程序设计出现之前,人们一直采用结构化程序设计(Structured Programming,简称SP)来解决实际问题。结构化程序设计是面向过程的,其主要思想是将功能分解并逐步求精。Pascal语言和C语言都很好地体现了结构化程序设计的思想。
按照结构化程序设计的要求,当需要解决一个复杂的问题时,首先应将它按功能划分为若干个小问题,每个小问题又可以按功能划分为若干个更小的问题,依此类推,直到最低一层的问题较容易用程序实现为止;然后将所有的小问题全部解决并把它们组合起来,复杂的问题就迎刃而解了。然而到了20世纪80年代末,随着所要开发程序规模的增大,结构化程序设计的一些缺点就显得越来越突出,这主要表现为:
(1)数据和算法的一致性差。在结构化程序设计中,数据与处理数据的算法是相互分离的。当数据量增大时,程序会变得越来越难理解。如果根据需要而改变某一项数据时,处理此数据的所有算法都要作相应的修改,这就很容易使算法与数据出现不一致的现象。这样的程序是很难修改和维护的。
(2)程序的可重用性差。在电子技术中,要实现某种功能往往有标准的元器件供选择,而不需要自己去设计发明。这就体现出了可重用的思想,即某种通用功能由事先设计好的标准部件来实现。如果在程序设计中可重用性高,那么在很大程度上可以节省人力和物力的浪费。但是结构化程序设计并不支持可重用性,这就使得程序员在开发软件时每次都从零做起,重复着许多同样的工作。
而现实世界中的实际情况恰恰与结构化程序设计思想不同。现实世界中每一种事物都具有一些属性来描述自身的特征,同时具有一些操作来改变自身状态。例如,一辆汽车可以用有型号、颜色、载重量、行驶速度等信息进行描述,这些都是这辆汽车的属性;而开动汽车使它前进、后退、左转、右转等,都是对汽车状态的操作。这样,全部属性和操作的集合就定义了这种汽车的类型。显然,在程序设计中属性对应于数据,操作对应于算法。因此,将数据和处理数据的算法捆绑成一个整体就定义了一种事物的类型。事物类型是一种抽象的概念,只有属于该类型的一个事物实例才是具体可见的,这个实例就叫做“对象”,而事物类型被称为“类”,它们都是面向对象程序设计的基础。
……
展开