《软件工程》
第八章 程序编码
《软件工程》
【本章引言】完成系统设计后,进入到系统实现阶段。系统实 现阶段的主要任务是根据系统设计规格说明书的内容 编写程序代码,这个阶段称为程序编码。程序编码就 是把软件设计阶段的成果(主要是详细设计规格说明书) 使用某种计算机程序编程语言转换成计算机能够理解 的形式――程序代码的过程。作为软件工程生命周期 的一个阶段,程序编码的实质就是对软件设计的翻译, 翻译过程所使用的计算机程序设计语言及程序员的编 程风格对程序的可靠性、可读性、可测试性、可维护 性等方面都将产生很大的影响,从而最终影响到计算 机软件系统的质量。程序编码阶段的目标是编写出满 足系统功能要求的、正确的代码。
《软件工程》
【本章重点】
程序设计语言的特点; 程序设计语言的选择。
《软件工程》
【学习目标】
掌握程序设计语言选择的方法; 了解软件复杂性的度量方法。
《软件工程》
【学习内容】
8.1 8.2 8.3 8.4 8.5 8.6 8.7
程序设计语言 结构化程序设计 程序设计风格 程序设计效率 程序复杂性度量 小结 习题
《软件工程》
8.1 程序设计语言
作为程序设计的工具,不同的计算机编 程语言具有不同的语言特性和适用范围, 程序设计语言的选择不仅决定了目标系 统的完成效率,还会决定目标系统的功 能完善程度,还会影响程序员的思维和 解决问题的方式,也会影响维护人员阅 读和理解程序的难易程度。所以,程序 编码之前的一项重要工作就是选择一种 适合的程序设计语言。
《软件工程》
8.1.1 程序设计语言的分类
编程语言经过多年的发展,从机器语言 直到今天最流行的面向对象语言,已经 有上千种之多,但能被广泛使用的语言 却不多。不同的时代有不同的与计算机 硬件技术和操作系统相匹配的编程语言。 根据编程语言的特点和发展的进程,将 程序设计语言分为5大类。
《软件工程》
1.第一代语言――机器语言(Machine Language) 机器语言由二进制的1、0指令代码组成的字 符串构成,机器语言属于低级语言。不同的 CPU具有不同的指令系统。由于机器语言是 二进制代码,这些代码不需要翻译,可以直 接被计算机识别和执行,因此用机器语言编 写的程序占用内存少,执行效率高。但机器 语言不直观,具有很多缺点,如难编写、难 修改、难维护,需要用户直接对存储空间进 行分配,编程效率极低。此外,由于不同的 机器有相应的一套机器语言,所以程序的可 移植性很差。
《软件工程》
2.第二代语言――汇编语言(Assembly Language) 汇编语言指令是机器指令的符号化,与机器语言有直接 的对应关系,将机器指令对应成为人们易
读的助记符, 如ADD、LDA和MOV等。同机器语言一样,汇编语言也 属于低级语言。汇编语言又称符号语言,它把计算机所 能识别的机器指令用符号表示出来,从而比二进制表示 的机器语言更直观,更方便阅读和排错。虽然汇编语言 比机器语言容易理解,容易记忆,但还是有难掌握、容 易出错、维护困难等缺点。不同指令集的处理器系统能 够有自己相应的汇编语言。 但是汇编语言也有自己的优点:可直接访问系统接口, 汇编程序翻译成的机器语言程序的效率较高。因此,在 某些使用高级语言不能满足要求用户需求的情况下,如 要求实时性较高,可以使用汇编语言编码。现在,程序 员主要使用汇编语言编写系统程序,如编译器、操作系 统和设备驱动程序等。
《软件工程》
3.第三代语言――高级语言(High-level Language) 高级程序设计语言起始于20世纪50年代中期。高 级语言的出现比前两代语言有显著的进步。从语 句结构看,它比较接近人类的自然语言,程序中 所用的运算符和运算表达式也与数学中的形式差 不多,因此,高级语言也称算法语言。和机器语 言及汇编语言相比,高级语言比较容易掌握和理 解,并且通用性强,可以在不同的机器上运行, 便于维护,极大地提高了程序设计的效率和可靠 性。 从软件工程的角度看,高级语言可以分为基础语 言、结构化语言和专用语言三类。
《软件工程》
(1)基础语言 这类语言开发于20世纪50年代至60年代。其 特点是出现早、应用广泛、有大量软件库, 为早期的程序员广泛接受和熟悉,所以称为 基础语言。BASIC、FORTRAN、COBOL和 ALGOL等语言是这种语言的代表。BASIC, 是Beginner’s All-purpose Symbolic Instruction Code的缩写,翻译为初学者通用 符号指令代码,是为是一种典型的交互式语 言,用于一般数值计算于事物处理,具有简 单易学、交互性好等优点,式是初学者比较 好的入门语言。随着语言的发展,基础语言 的部分性能已经老化,很难适应现代软件开 发的需要。但有些语言随着版本的更新与性 能的改进,至今仍被使用。
《软件工程》
(2)结构化语言 结构化语言的特点是直接提供结构化的控制结构语 句及数据类型定义语句,具有很强的过程描述能力 和数据结构描述能力。其主要优点是模块清晰、控 制结构完备、数据结构和数据类型丰富、表达能力 强及可移植性好。20世纪70年代以来,出现了以 Pascal、C、PL/1和Ada等为代表的一批结构化程序 设计语言。 C语言是使用较多的一种结构化语言,于1973年由 美国著名的Bell实验室Ritchie研制成功并作为UNIX 操作系统的主要语言,后成功移植到各种机型上, 成为一种通用的
程序设计语言。它具有结构化语言 的公共特征,如表达简洁、控制结构与数据结构完 备,运算符和数据类型丰富,而且可移植性强,编 译质量高。用C语言编译程序产生的目标程序,其 质量可以与汇编语言产生的目标程序相媲美,广泛 用于系统程序设计及嵌入式系统开发。
《软件工程》
(3)专用语言 专用语言是为特殊的应用而设计的语言, 通常具有自己特殊的语法形式,面对特 定的问题,输入结构及词汇表与该问题 的相应范围密切相关。由代表性的专用 语言有APL、PROLOG等。从软件工程的 角度来看,专用语言支持了特殊的应用, 将特定的设计要求翻译成可执行的代码。 但是它们的可移植性和可维护性比较差。
《软件工程》
4.第四代语言――4GL语言(Fourth Generation Language) 第三代语言是过程化语言,编码时,要详细描 述问题求解的过程,告诉计算机每一步应该怎 么做。为了把程序员从繁重的编码中解放出来, 还需要寻求进一步提高编码效率的新语言,这 就是第四代语言产生的背景。
《软件工程》
从1969年开始计算机科学家们开始开发第四代语言, 这类语言比第三代语言更象人类的语言或自然语言。 第四代语言删除了很多在第三代语言中出现的严格的 语法规则。第四代语言的出现将语言的抽象层次又提 高到一个新的高度。同其它语言一样,第四代语言也 用不同的文法表示程序结构和数据结构,但是它是在 更高一级抽象的层次上表示这些结构,它不需要规定 太多的算法细节。第四代语言是面向应用的,只需说 明做什么就可以了,不比关心怎么做。 4GL兼有过程性和非过程性两重特性。程序员规定条件 和相应的动作――这是过程性的部分;并且指出想要 的结果――这是非过程性的部分,然后由4GL语言系统 运用它的专门领域的知识来填充过程细节。 Martin把第四代语言分为以下几种类型:
《软件工程》
(1) 查询语言:通常查询语言是为与数据库有关的应用 而开发的。用户可利用查询语言对预先定义在数据库中 的信息进行较复杂的操作。 例如一些目前可用的查询语言提供了自然语言接口,允 许用户给出的描述如“对东北地区和华北地区,使用最 近3年的实际销售额预测明年的销售前景”。绝大部分 用户都喜欢这种接口方式。 (2) 程序生成器:程序生成器代表更为复杂的一类4GL, 它只需很少的语句就能生成完整的第三代语言程序,甚 至是第五代程序语言,目前一般用于MIS系统、菜单生 成等方面。 (3) 其它4GL:如判定支持语言、原型语言、形式化规 格说明语言等。 第四代语言第典型代表有SQL(Structured Query Language)和RPG(Report Program Generator)。
现在第 四代语言主要用于数据库应用。