1.2 程序设计方法

1.2.1 面向过程的结构化程序设计

程序设计是指设计、编写、调试程序的方法和过程。程序设计方法有两种:一种是面向过程的结构化程序设计,另一种是面向对象程序设计。

面向过程的结构化程序设计的主要思想是分解功能并自顶向下逐步求解。简单地说,过程就是程序中执行某项操作的一段代码。面向过程的结构化程序设计是指把一个复杂的程序按照不同的功能分解成若干相对简单的独立过程(代码段),即模块,而每个模块的结构可以由顺序结构、选择结构和循环结构这3种基本结构组成。使用这样的程序设计方法可降低程序的复杂性。

顺序结构、选择结构和循环结构这3种基本结构如图1.2所示。

图1.2 程序的3种基本结构

1.2.2 面向对象程序设计

与面向过程的结构化程序设计相比,面向对象程序设计是一种更优秀的程序设计方法。

面向对象程序设计的主要思想是把问题分解成各种独立而又可以互相调用的对象。这与传统的面向过程的结构化程序设计的思想不同:面向过程的结构化程序设计将程序看作一系列独立过程(模块)的集合,而各个过程所实现的功能一般都是单一且独立的;面向对象程序设计中的每一个对象都应该能够接收数据、处理数据并将数据传递给其他对象,因此每一个对象都可以被看作一个小型且功能完备的“机器”。

面向对象程序设计中的主要概念是对象。对象是一个具有各种属性值和方法(某种操作功能)的实体,类是对象的抽象定义。可以把类理解为建造某种东西的设计图,那么对象就是依据这张设计图建造的一个实物。

开发人员在设计对象和类时尽可能地模拟了人类的思维,也就是将抽象的问题转换为具体的对象,这使得程序设计更加符合人类的认知。

C++是当今应用最广泛的面向对象程序设计语言之一,它对C语言进行了扩充和完善。C语言是一种面向过程的结构化程序设计语言,C++与C语言最大的区别就是C++增加了类和对象。事实上,任何合法的C语言程序都是合法的C++程序。虽然C++源于C语言,但C++并不只是简单地增加了类和对象,所以应该把C++当作一门新的面向对象程序设计语言来学习。

1.2.3 程序与算法

编程是为了让计算机解决特定的问题,编程之前需要先明确计算机解决该问题的具体步骤。这里的步骤就是编写该程序所需要的算法

编程就是通过某一种程序设计语言(如C++)来实现算法。

算法如同菜谱,但是仅有菜谱是做不出美味佳肴,还需要各种食材,程序所需的食材就是需要用到的各种数据。可以把一个程序简单地理解为算法与各种关联的数据的和。图1.3所示为程序、算法、数据之间的关系。

图1.3 程序、算法、数据之间的关系

解决同一问题的算法有多种(见图1.4),编程时需要选择运行效率最高的算法。程序运行效率的高低用两个指标来衡量:一个是程序运行时占用的内存,占用的内存越少,运行效率越高;另一个是程序运行时间,运行时间越短,运行效率越高。

图1.4 解决同一问题的不同算法

1.2.4 算法描述

设计好一种算法后,必须清楚、准确地将所设计的求解步骤记录下来,即生成算法描述。可以用自然语言、流程图、N-S图(又称盒图)、伪代码和问题分析图(Problem Analysis Diagram,PAD)等来描述算法,本书只介绍最常见的用流程图描述算法的方法。用流程图描述算法需采用一组特定的图形符号(见表1.1),这些图形符号的主要优点是直观易懂,能表示程序的控制流程。

表1.1 流程图中的常见图形符号及其含义

结构化程序设计中常用的3种程序结构分别是顺序结构、选择结构和循环结构,这3种结构的流程图描述如图1.5所示。

图1.5 顺序结构、选择结构和循环结构的流程图描述