
1.2 程序设计方法
1.2.1 传统的结构化程序设计
传统的程序设计方法可以描述为“程序=算法+数据结构”,它将程序定义为处理数据的一系列过程。这种设计方法的着眼点是面向过程的,特点是数据与程序分离,即数据与数据处理分离。20世纪60年代,随着软件工程概念的提出,结构化程序设计方法逐渐产生并发展起来。
1976年,著名计算机科学家N.Wirth在其所著的《算法+数据结构=程序》一书中,明确提出算法和数据结构是程序的两个要素,即程序设计主要包括两方面的内容:行为特性的设计和结构特性的设计。行为特性的设计是指完整地描述问题求解的全过程,并精确地定义每个解题步骤,这一过程即是算法设计;而结构特性的设计是指在问题求解过程中,计算机所处理的数据及数据之间联系的表示方法。
结构化程序设计的核心是算法设计,基本思想是采用自顶向下、逐步细化的设计方法和单入单出的控制结构。自顶向下、逐步细化指的是将一个复杂任务按照功能进行拆分,形成由若干模块组成的树状层次结构,逐层细化到便于理解和描述的程度,各模块尽可能相对独立。而单入单出的控制结构指的是每个模块内部均用顺序、选择和循环三种基本结构来描述。
结构化程序设计将任务划分为模块,对各个模块进行独立的设计和测试,这为处理复杂问题提供了有力手段,所以一度成为程序设计的主流方法。然而到20世纪80年代末,这种设计方法开始逐渐暴露出缺陷。主要表现在:
(1)难以适应大型软件的设计。由于数据与数据处理相对独立,在大型多文件软件系统中,随着数据量的增大,程序变得越来越难以理解,多个文件之间的数据沟通也变得困难。
(2)程序可重用性差。结构化程序设计由于缺乏软件重用能力的工具,即使处理老问题,处理方法的改变或数据类型的改变都将导致重新设计,导致重复投入。
1.2.2 面向对象的程序设计
虽然结构化程序设计方法具有很多的优点,但还是存在程序可重用性差、不适合开发大型软件的不足。为了克服以上的缺点,一种全新的软件开发技术应运而生,这就是面向对象的程序设计方法。
面向对象程序设计方法将数据及对数据的操作方法放在一起,作为一个相互依存、不可分离的整体——对象。对同类型对象抽象出其共性,形成“类”。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过发送消息进行通信。这样,程序模块间的关系更为简单,程序模块的独立性、数据的安全性有了良好的保障。另外,通过类的继承与多态可以很方便地实现代码的重用,大大缩短了软件开发的周期,使得软件的维护更加方便。
面向对象的程序设计并不是要摒弃掉结构化程序设计,这两种方法各有用途、互为补充。在面向对象程序设计中仍然要用到结构化程序设计的知识。例如,在类中定义一个函数就需要用结构化程序设计方法来实现。
面向对象程序设计的基本概念有对类、象、封装、继承、多态性等,第7章有详细的讲解。