Software Development 软件开发
计算机程序
简介
计算机程序是一套指令集,用于管理计算机来执行一些功能操作。对于要执行的指令,计算机必须要通过执行一个程序来获得,也就是说,计算机先读取该程序,然后按照程序中明确的指令顺序逐步执行,直到完成。一个程序可以依据用户的交互被计算机执行很多次。
程序可以分成两种主要的类型:应用程序和操作系统。应用程序是一种可以直接为用户操作的程序,比如字处理软件或者电子游戏软件。而操作系统是一种管理计算机以及连接到计算机的各种资源和设备的程序,这些资源设备可以是RAM、各种硬件、显示器、键盘、打印机和Modems。由于操作系统的管理,所有这些设备才可以被其他程序使用。
程序开发
软件设计人员通过工具软件或者开发软件来构建一个新的应用程序而程序员使用文本编辑器和特点的编程语言来开发一个新的程序。使用文本编辑器,程序员可以创建源文件来组织有序的指令序列,这些指令在程序中被称为源代码。然后需要一种特殊的应用程序来把这些源代码翻译成机器语言或者目标代码(一种操作系统能够识别和执行的格式)。
把源程序翻译成目标代码时,有三种类型的应用程序来完成:编译器、解释器、汇编器。这三种操作互不相同而且作用在不同的语言上,但是他们共同的目标是把程序最终翻译为机器语言。
编译器把用高级语言编写的文本源代码同时翻译成目标代码,这个与解释执行的语言有所不同,如BASIC,该语言是逐句翻译逐句执行的。 解释性语言的优点是他们可以立即执行而不用等到所有的代码都被编译完成,修改代码后也能够很快就可以得到执行而不用等到再次编译。解释性语言的缺点则是执行速度要慢点,因为全部的程序代码都需要逐句翻译逐句执行,换言之,编译性语言则是一次性编译所有的代码,因此计算机可以快速执行。正因为这个原因,编译性语言在专业和科学应用中是最普遍和最常用的语言。
另一种翻译器是汇编程序,它用于处理程序中用汇编语言编写的部分。汇编语言也是一种编程语言,但是它比其他高级语言更接近机器语言,在汇编语言中,一条单一的语句通常被翻译成一条单一的机器指令。如今,汇编语言很少用在程序中,但是也会应用在直接控制计算机一些特殊的功能上。
在程序中,常常会编写模块来表示整个应用的一些功能,模块可以独立编译,程序可以通过链接器来联接所有的模块并生成一个可执行程序。
程序几乎很少在第一次能够正常运行,于是通过软件调试程序来查找程序错误。调试程序时常常是在可执行程序中检测事件,然后在程序源码中定位到错误发生的起源。
在现代的编程体系中,如Java,采用联合的方式来创建可执行的程序,编译器把Java源程序翻译成可立即执行的形式,中间件程序可以通过Internet传送到计算机中并被执行。
程序单元
大多数程序都由几种步骤来实现,在不同的上下文环境里和程序中不同的组合中,这些步骤都是可重复的。在程序员指定的顺序中,最常见的是执行计算然后处理下一步。程序常常需要多次重复一系列的步骤,比如浏览得分列表然后查找最高分数,程序中重复的代码序列被称为循环。
计算机的一个很有用的功能是待处理的数据生成条件选择然后执行不同的指令操作。If-then-else语句就实现了这种功能,它根据一些数据的测试结果,然后选择两个指令中的一个来执行,一些可选的指令如goto语句可以直接跳转到需要执行的地方。例如,程序可能比较两个数然后根据比较的结果出现不同的分支语句中。
程序时常多次使用特定的指令步骤,这些步骤可以组织为一个子例程,程序中的各个部分都可调用和访问他们。当调用子例程时,计算机会记住它的位置,以便处理返回操作。
在执行每次调用之前,程序会指定子例程所用的数据,并允许使用多种方式来处理该操作。
大多数程序都会使用多个子例程,最常用的是子例程包括函数、过程、库程序、系统程序以及设备驱动程序等。函数是最短的子例程,它可以用于一些值运算,比如角度计算。过程执行的功能要复杂点,比如姓名排序。库程序是由不同程序编写来便于使用的子例程,系统程序与库程序类似,但只能在操作系统中去查找。这些子例程为应用程序提供各种服务,比如输出一行文本。设备驱动是添加到操作系统中的系统程序,他们用于控制计算机与外部设备(扫描仪、打印机)之间的通信和交互。除此之外,驱动还拥有计算机可直接执行的功能,这些功能允许用户直接控制设备,这种功能非常有用,比如当更换墨盒时,可重新调整彩色打印机来获得最好的打印质量。
程序功能
现代计算机通常都使用磁性媒介来存储和读取程序,比如硬盘或可移动软盘。磁盘中有很多被称为目录的附加信息,这些信息表示磁盘上程序的名称。当用户要执行某个程序时,操作系统会浏览目录然后找到该程序,然后读取到RAM中,接着通知CPU来启动该程序。开始执行时,计算机先在内存中找到可用的存储单元,然后读取用户指定的默认值,最后通过显示器来初始化界面。
程序会通过执行一次系统调用来获取用户输入的信息副本,操作系统会把该数据转换为一种标准的内部形式,然后程序会根据该信息来决定下一步执行什么。例如执行重新格式化页面文字或者获取磁盘上另一个文件的信息。一般情况下,调用系统子例程常常用于执行结果显示或文件读取。
当程序执行结束或者提示退出时,它会执行进一步的系统调用来确保数据能够保存到磁盘上,然后执行最后一次系统调用来通知操作系统,表示它已退出,操作系统然后会回收RAM,释放其他设备。
未来趋势
计算机科学领域自上个世纪50年代开始便已快速的在发展,在此间,计算机程序也经历了很多改变。在计算方向出现了很多新思想,诸如并行计算、分布式计算还有人工智能,他们快速的改变着传统的程序概念。
在并行计算(多个CPU同时协同处理同一个问题)领域里,科学家已引进了很多新的程序模型。在并行计算中,一个问题是同时由多个不同的处理器来处理,这种方式可快速解决问题。科学家和工程师面临着许多挑战,因为这是一项极其复杂的系统,在操作效率上面临许多困难。
分布式计算使用许多互连的计算机的CPU来解决问题,在分布式计算的应用中,计算机都是可联网的,互联网应用变得非常有用。在这样的应用中,用户登入Web站点,然后下载一个Java应用,当运行该程序时,它就可与其他程序进行通信,即使是在不同的计算机或站点中。
在人工智能方向的研究已催生了很多新式程序的出现。比如逻辑程序,不包含任何独立的指令,只有一套规则:如果发生X,则执行Y。有一种特殊的程序叫推理机就采用这种规则来推理结果。逻辑程序中的应用包括由复杂系统的自动监视功能,数学理论的证明功能。