Java等最近出现的编程系统,采取多种方法相结合的方式创建和执行程序。编译程序取
来Java源程序,并将其翻译成中间形式。这样的中间程序随后通过因特网传送给计算机,而
计算机里的解释程序接着将中间形式作为应用程序来执行。 三、程序元素
多数程序仅由少数几种步骤构成,这些步骤在整个程序中在不同的上下文和以不同的组
合方式多次重复。最常见的步骤执行某种计算,然后按程序员指定的顺序,进入程序的下一 个步骤。
程序经常需要多次重复不长的一系列步骤,例如:在浏览游戏得分表并从中找出最高得
分时。这种重复的代码序列称为循环。
计算机具有的使其如此有用的能力之一,是它们能够作出条件判定,并根据正在处理的
数据的值执行不同的指令。if-then-else(如果-则-否则)语句执行这种功能,采用的方法
是测试某个数据片,然后根据结果从两个指令序列中选择一个。这些选择对象中的指令之一
可能是一个goto语句,用以指引计算机从程序的另一个部分选择下一条指令。例如,一个程
26
序可能比较两个数,并视比较结果而分支到程序的另一个部分: If x is greater than y then
goto instruction #10 else continue
程序经常不止一次地使用特定的一系列步骤。这样的一系列步骤可以组合成一个子例
程,而子例程根据需要可在主程序的不同部分进行调用或访问。每次调用一个子例程,计算
机都会记住该调用发生时自己在程序中所处的位置,以便在运行完这个子例程后还能够回到
那里。在每次调用之前,程序可以指定子例程使用不同的数据,从而允许一个通用性很强的
代码片只编写一次,但以多种方式使用。
大多数程序使用几种不同的子例程。其中最常用的是函数、过程、库、系统例程以及设
备驱动程序。函数是一种短的子例程,用来计算某个值,如角的计算,而该值计算机仅用一
条基本指令无法计算。过程执行的是比较复杂的功能,如给一组名字排序。库是为多种不同
程序使用而编写的子例程。系统例程类似于库程序,但实际上用于操作系统。它们为应用程
27
序提供某种服务,如打印一行文字。设备驱动程序是一种系统例程,它们加到操作系统中,
以使计算机能够与扫描仪、调制解调器或打印机等新设备通信。设备驱动程序常常具有可以
作为应用程序直接执行的特征。这使用户得以直接控制设备。这一点很有用,例如:在彩色
打印机更换墨盒后需要重新调整以达到最佳打印质量的情况下。 四、程序功能
现代计算机通常将程序存储在计算机可以随机访问的某种形式的磁性存储介质上,如固
定放在计算机内的硬盘或者便携式软盘。这些磁盘上称为目录的额外信息,指明盘上各种程
序的名称、它们写入盘中的时间以及它们在磁盘介质上的起始位置。用户命令计算机执行一
个特定应用程序时,操作系统就浏览这些目录,找到程序,并将一个副本读入随机存储器。
操作系统然后命令中央处理器开始执行程序开头的指令。程序开头的指令为计算机处理信息
作好准备,其方法是在随机存储器中找到空闲存储单元来容纳工作数据,从盘中检索用户指
出的标准选项和默认值的副本,并在监视器上绘制初始显示。 应用程序通过调用系统例程来对用户输入的任何信息都要求一个副
28
本。操作系统将如此
输入的任何数据都转换成标准的内部形式。应用程序然后使用该信息决定下一步干什么,如
执行某项期望的处理功能——像重新格式化一页文本或从盘上的另一个文件获取一些额外
信息。两种情况无论是哪一种,都要调用其他系统例程,以事实上完成结果的显示或对盘上 文件的访问。
运行结束或接到退出的提示时,应用程序进行进一步的系统调用,以确保所有需要保存
的数据已写回磁盘。然后,应用程序向操作系统进行最后一次系统调用,指明它已运行结束。
操作系统接下来释放随机存储器和该应用程序使用的任何设备,并等待用户的命令,以开始 运行另一个程序。 五、历史
人们以程序的形式存储指令序列已经有几个世纪了。18世纪的音乐盒和19世纪末与20
世纪初的自动钢琴,就可以播放音乐程序。这些程序以一系列金属针或纸孔的形式存储,每
一行(针或孔)表示何时演奏一个音符,而针或孔则表明此时演奏什么音符。19世纪初,随
29
着法国发明家约瑟夫―玛丽·雅卡尔发明由穿孔卡片控制的织机,对物理设备更精巧的控制
变得常见了。在编织特定图案的过程中,织机的各个部分得进行机械定位。为了使这个过程
自动化,雅卡尔使用一张纸质卡片代表织机的一个定位,用卡片上的孔来指示应该执行织机
的哪种操作。整条花毯的编织可编码到一叠这样的卡片上,同样的一叠卡片每次使用都会编
出相同的花毯图案。在开发和使用的程序中,有的由24,000多张卡片构成。
世界上第一台可编程的机器是由英国数学家和发明家查尔斯?巴比奇设计的,但他从未
完全制造成该机器。这台叫做分析机的机器,使用和雅卡尔织机类似的穿孔卡片,来选择每
个步骤应该执行的具体算术运算。插入不同的卡片组,就会改变机器执行的运算。这种机器
几乎能在现代计算机中找到所有的对应物,但它是机械化的,而非电气化的。分析机的制造
从未完成,因为制造它所需要的技术当时不存在。
供分析机使用的最早卡片组式程序是由诗人拜伦勋爵的女儿、英国数学家奥古斯塔?埃
达?拜伦开发的。由于这个原因,她被公认为世界上第一位程序员。
30