计算机专业英语(第2版)
上QQ阅读APP看书,第一时间看更新

Reference Translation 程序设计

1.程序

在计算科学中,程序是一组特定的由计算机来执行的命令。在1945年由约翰·冯·诺伊曼描绘的现代计算机中,程序包含计算机可执行的指令序列,一次执行一个指令。通常程序被放入一个计算机可读取的存储区域。计算机得到一个指令,执行它,然后得到下一个指令。存储区或存储器也可以包含指令所用的数据(请注意,程序也是一种特殊的“数据”,它告诉如何运行“应用程序或用户数据”)。

就如何驱动程序以及怎样连续地运行而言,它们可以具有交互或批处理的特点。一个交互式程序从交互式用户处接收数据(或者可能从模拟交互式用户的另一个程序接收数据)。批处理程序运行并完成其工作,然后停止。那些请求交互式程序运行批处理程序的交互用户可以启动批处理程序。一个命令解释器或Web浏览器就是交互式程序的一个例子。计算并打印出某个公司工资的程序是批处理程序的一个例子。打印作业也是批处理程序。

当创建一个程序时,你会使用某种计算机语言来编写。语句段就是源程序。然后,“编译”源代码程序(用一个叫作语言编译器的特殊程序),其结果被称为目标程序(不要与面向对象编程混淆)。目标程序有几个同义词,包括目标模块和编译后的程序。目标程序包含称为机器语言的供逻辑处理器来用的一系列的0和1。

计算机的机器语言是由能够理解计算机逻辑体系结构的语言编译器构建,其中包括一组可能的计算机指令和一个指令的长度(位数)。

2.结构化程序设计(模块化编程)

结构化程序设计(有时也被称为模块化编程)是过程式编程的一个子集,增强了程序的逻辑结构,使其更有效,更容易理解和修改。某些语言,如Ada、Pascal和dBASE的设计具有鼓励或强制使用逻辑程序结构的特点。

结构化编程中经常采用自顶向下的设计模型,其中开发人员把整个程序结构分成独立的小节。把定义好的功能或一组类似的功能编码为一个单独的模块或子模块,这意味着代码可以更有效地加载到内存中,并且模块也可以在其他程序中重用。在一个模块已经单独进行测试后,再与其他模块一起集成到整个程序结构中。

程序流程遵循简单的分层模型,它采用如“for”“repeat”和“while”这样的循环结构。不主张使用“Go To”语句。

结构化程序设计最早是由Corrado Bohm和Guiseppe Jacopini提议的。这两位数学家论证了任何计算机程序都可以只用三种结构写成:顺序、选择和循环。Edsger Dijkstra的后续文章《GO TO语句有害》推动了结构化程序设计的发展。最常见的方法由Dijkstra开发。在这个模型中(这通常被认为是等同于结构化编程,虽然有其他模型存在),开发者把程序分成小节,每节只有一个入口点和一个出口点。

几乎任何语言都可以使用结构化编程技术,以避免非结构化语言的常见陷阱。非结构化编程必须依靠开发人员的纪律,以避免结构性问题,以及由此可能导致组织混乱的程序。大多数现代程序语言具有鼓励结构化编程的特点。面向对象编程(OOP)可以被看作结构化编程的一种类型。它使用结构化编程技术的程序流程,并为数据模型增加了更多的结构。

3.编译器

编译器是一个特殊的程序,用来处理用特定编程语言写的语句,并把它们转化成计算机处理器可用的机器语言或“代码”。通常情况下,程序员在编辑器中用像C或Pascal这样的编程语言一次一行地编写语句。所创建的文件包含了所谓的源语句。程序员然后运行相应的语言编译器,并指定包含源语句的文件名。

当执行(运行)时,编译器首先按照语法一个接一个地解析(或分析)语句,然后,在一个或多个连续阶段或“关口”建立输出代码,确保与其他语句相关的语句在最终代码中能正确引用。传统上,编译器的输出被称为目标代码或有时也叫目标模块(注意,这里的术语“object”与面向对象编程无关)。目标代码是处理器可以一次处理或执行一个指令的机器代码。

最近,Java编程语言——在面向对象编程中使用的语言——引入了可以在任何有Java虚拟机或字节码解释器平台的计算机上运行的编译输出(称为字节码)的可能性,这样可以把字节码转换为能够由实际硬件处理器执行的指令。使用此虚拟机,字节码可以有选择地在执行平台由即时编译器重新编译。

传统上在某些操作系统中,编译之后需要一个额外的步骤——当一个以上的目标模块要同时运行并要实现指令序列和数据的相互交叉时,需要解决指令序列或数据相对位置的问题。这个过程有时叫作连接编辑和输出(称为载入模块)。

编译器与有时也叫作第三代编程语言和更高级的语言一起工作。汇编器处理使用处理器的汇编语言编写的程序。

4.解释器

解释器是执行由一个高级语言编写的指令的程序。有两种运行高级语言编写的程序的方式。最常见的是编译该程序,另一种方法是通过解释器运行该程序。

解释器把高级指令转换成中间形式,然后执行它。与此相对应,编译器将高级指令直接转换成机器语言。通常编译的程序运行速度比解释的程序更快。但是,解释器的优势在于它不需要经过生成机器指令的编译阶段。如果程序很长,这个过程可能是费时的;另一方面,解释器可以立即执行高级程序。因此,在程序的开发过程中,当程序员想一次添加小段程序并迅速对其进行测试时,有时会使用解释器。此外,解释器往往在教学中使用,因为它们允许学生进行交互编程。

解释器和编译器都可用于大多数高级语言。然而,BASIC和LISP是专门为通过解释器执行而设计的。此外,页面描述语言,如PostScript,使用解释器。例如,每一个PostScript打印机有一个内置的执行PostScript指令的解释器。

5.高级语言

如C、FORTRAN或Pascal这样的编程语言让程序员编写的程序或多或少地独立于具体的计算机类型。这样的语言被认为是高级的,因为它们更接近人类的语言,更远离机器语言。与此相反,汇编语言被认为是低级的,因为它们很接近机器语言。

与低级语言相比,高级语言的主要优点是,它们更容易读、写和维护。最终,用高级语言编写的程序必须由编译器或解释器转换成机器语言。

最早的高级编程语言被设计出来是在20世纪50年代。现在,有几十种不同的语言,包括Ada、Algol、BASIC、COBOL、C、C++、FORTRAN、LISP、Pascal和Prolog。

6.脚本语言

脚本语言是高级编程语言,由另一个程序在运行时解释,而不是由计算机的处理器编译成其他编程语言(如C和C++)。脚本语言可以被嵌入到HTML中,通常用于给Web页面添加功能,如不同的菜单样式或图形显示或提供动态广告。此类语言是客户端脚本语言,它们会影响终端用户在浏览器窗口看到的数据。其他脚本语言是服务器端脚本语言,通常操作服务器上一个数据库的数据。

脚本语言的产生在很大程度上是因为因特网成为一种主要的通信工具。JavaScript、ASP、JSP、PHP、Perl、Tcl和Python都是脚本语言的例子。