程序

计算任务的处理对象和处理规则的描述。任何以计算机为处理工具的任务都是计算任务。处理对象是数据,如数字、文字和图像等。处理规则一般指处理动作和步骤。在低级语言中,程序是一组指令和有关的数据。在高级语言中,程序一般是一组说明和语句。程序是程序设计中最基本的概念,也是软件中最基本的概念。程序是软件的本体,又是软件的研究对象。程序的质量决定软件的质量。

程序要能实际起作用,必须装入到机器内部。程序的实际工作过程称为程序的执行。衡量程序质量,除对程序结构进行静态考察外,还必须考察其执行过程。与执行过程无关的特性,称为程序的静态特性;与执行过程有关的特性,称为程序的动态特性。

发展过程

在软件发展的第一阶段中(1946~1956年),程序都是用机器语言或接近于机器语言的汇编语言书写的,即都是低级语言程序。从内部特性上看,程序内部的工作严格依顺序执行,因此都是顺序程序。衡量程序质量的标准主要是功效,运行时间要省,占用空间要小。软件发展的第二阶段(1956~1968年),程序主要都用高级语言书写,即高级语言程序。当然,低级语言程序仍然存在。这时除了顺序程序以外,还出现了具有并行成分的并发程序。衡量程序质量的标准,已经逐步转向易读性和易维护性。在软件发展的第三阶段(1968年以来),由于程序的规模增大,对程序的模块化、结构化的要求越来越高,出现了一些模块化语言。同时,由于并发程序的比重增高,为了更好地书写并发程序,出现了一些具有并行成分的语言,并且由于实时处理的需要,在语言中设有相应的实时处理成分。总之,这一阶段的程序,主要是具有并行成分和实时处理成分的模块化程序,即现代高级语言程序。衡量程序质量的标准主要是结构良好性,使之易读、易维护。

基本成分

构成程序的基本成分包括程式、子程式、子程序、协同程式、递归程式和模块。

程式

与一项计算任务相应的处理对象和处理规则的描述。它一般在一个程序或多个程序中多次使用。

子程式

与子计算任务相应的处理对象和处理规则的描述。它一般也是多次使用。子程式有两个方面:一个是定义方面,称为子程式定义或子程式说明;另一个是调用方面,称为子程式调用。随着实现方式的不同,又可区分为开式子程式和闭式子程式。开式子程式在调用处嵌入相应的子程式定义;闭式子程式则在调用时直接转至相应的定义,执行后返回。二者各有利弊。开式子程式时间节省,空间浪费;闭式子程式恰恰相反。

子程序

程序中具有相对独立性的程序单位。

图 协同程式

一组程序单位可以互相调用,彼此处于平等地位,调用后毋须返回到开始位置,且自带工作区。图中的C1和C2表示两个协同程式。其中A1为C1的起点,当C1执行到A2位置,调用C2(C2的起点为B1),C1执行到B2位置又调用C1,这时便从A2 开始执行,到了A3位置又调用C2。依此类推,直到C1执行到终点A4处为止。

递归程式

可以作为其本身的子程式而被调用的程式。这种调用可以是直接的,也可以是间接的(即通过其他子程式)。

模块

具有相对独立性的一组逻辑上有关的实体。在现代高级语言中,有各种定义模块的方式,但其主要成分是一组说明和一组语句。

程序结构

由程序成分构造程序的方法和表示(见软件结构)。

程序质量

衡量程序质量的准则有:简明性、正确性、可靠性、易读性、易维护性、适应性、坚定性和稳定性等;此外,还有各种程序复杂性的量度。

参考书目
  1. 徐家福:《系统程序设计语言》,科学出版社,北京,1983。
  2. J.E.Sammet, Programming Languages: History and Fundamentals,Prentice Hall,Englewood Cliffs, New Jersey,1969.

参考文章