C++面向对象程序设计
上QQ阅读APP看书,第一时间看更新

1.2.1 面向对象方法的由来

在面向对象的方法出现以前,我们都是采用面向过程的程序设计方法。早期的计算机是用于数学计算的工具,例如,用于计算炮弹的飞行轨迹。为了完成计算,就必须设计出一个计算方法或解决问题的过程。因此,软件设计的主要工作就是设计求解问题的过程。

随着计算机硬件系统的高速发展,计算机的性能越来越强,用途也更加广泛,不再仅限于数学计算。由于所处理的问题日益复杂,程序也就越来越复杂和庞大。20世纪60年代产生的结构化程序设计思想,为使用面向过程的方法解决复杂问题提供了有力的手段。因而,在20世纪70年代到80年代,结构化程序设计方法成为所有软件开发设计领域及每个程序员都采用的方法。结构化程序设计的思路是:自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块,这些模块形成一个树状结构;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、分支和循环3种基本结构组成;其模块化实现的具体方法是使用子程序。结构化程序设计由于采用了模块分解与功能抽象以及自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。

虽然结构化程序设计方法具有很多优点,但它仍是一种面向过程的程序设计方法。它把数据和处理数据的过程分离为相互独立的实体,当数据结构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。另外,由于图形用户界面的应用,使得软件使用起来越来越方便,但开发起来却越来越困难。一个好的软件,应该随时响应用户的任何操作,而不是请用户按照既定的步骤循规蹈矩地使用。例如,我们都熟悉文字处理程序的使用,一个好的文字处理程序使用起来非常方便,几乎可以随心所欲,软件说明书中绝不会规定任何固定的操作顺序,因此对这种软件的功能很难用过程来描述和实现,如果仍使用面向过程的方法,开发和维护都将很困难。

那么,什么是面向对象的方法呢?首先,它将数据及对数据的操作方法放在一起,作为一个相互依存、不可分离的整体——对象。对同类型对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。这样,程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障。另外,通过后续章节中介绍的继承与多态性,还可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。

面向对象的方法有如此多的优点,然而对于初学程序设计的人来说,是否容易理解、容易掌握呢?回答是肯定的。面向对象方法的出现,实际上是程序设计方法发展的一个返璞归真过程。软件开发从本质上讲,就是对软件所要处理的问题域进行正确的认识,并把这种认识正确地描述出来。面向对象方法所强调的基本原则,就是直接面对客观存在的事物来进行软件开发,将人们在日常生活中习惯的思维方式和表达方式应用在软件开发中,使软件开发从过分专业化的方法、规则和技巧中回到客观世界,回到人们通常的思维方式。