第六章程序设计与软件工程基础 本章介绍程序设计语言及其分类,结构化程序设计的概念和面向对象程序设计的概念, 算法和程序的基本结构,软件工程概述及软件开发活动, Visual basic6.0程序设计语言 等内容 6.1程序设计语言 6.1.1程序设计语言分类 语言是人类用来表达意思,交流想法的工具。人类社会使用自然语言进行交流,如汉 语、英语、法语等,但计算机是不能直接执行人类自然语言的。程序设计语言是人与计算 机之间交换信息的工具,人是通过它来指挥计算机工作的。程序设计语言是一套表达计算 过程的符号系统,其表达形式能够同时被计算机和人所理解。 根据程序设计语言与计算机硬件的联系程度可将程序设计语言分为三类,即机器语言 汇编语言和高级语言。前两类依赖于计算机硬件,又统称为低级语言。高级语言与计算机 硬件关系较小。因此,可以说程序设计语言经历了由低级向高级的发展过程。 1.机器语言 机器语言是用二进制数表示的、计算机唯一能理解和直接执行的程序语言。机器语言 中的每一条语句(称为指令)都是二进制形式的指令代码,如101100000000指令代 码一般由操作码和参与操作的操作数两部分组成,如机器指令10110000000中, l0l10000为操作码(指令的功能),00001000为操作数(指令的对象),功能是将操作数8 送累加器AL。机器语言通常随着计算机型号的不冋同而不同,每一种型号的计算机所能执行 的全部指令的集合就是该型号计算机的指令系统。机器语言程序不直观,编写难度大,易 于出错,调试、修改繁琐,可移植性差,但执行速度最快。机器语言是最低级的程序设计 语言,目前除了在某些单板机上使用机器语言外,大部分计算机程序都不直接使用机器语 言编写 2.汇编语言 汇编语言是将机器语言“符号化”的程序设计语言。在汇编语言中,用助记符代替机 器指令,如可用汇编指令 MOV AL,8来代替上面的机器指令10110000001000显然,这 比一串二进制代码容易书写和容易记忆 汇编语言程序比机器语言程序易于编写、检査和修改,也保持了机器语言编程质量高、 运行速度快、占用存储空间少等优点。但汇编语言也是面向机器的语言,故通用性和可移 植性差,即:能在某一类计算机上运行的程序,却不能在另一类计算机上运行。汇编语言 也属于低级语言,它常用来编写实时系统以及高性能软件。 3.高级语言 高级语言是50年代后期发展起来的、面向问题求解过程的程序设计语言。与汇编语言 相比,高级语言更接近于人类的自然语言和数学语言,一般采用英语单词表达语句,便于 理解、记忆和掌握,如高级语言语句c=a+b的功能是将变量a、b的和存放在变量c中。高 级语言的一个语句通常对应多条机器指令,因而用高级语言编写的程序短小精悍,不仅便
1 第六章 程序设计与软件工程基础 本章介绍程序设计语言及其分类,结构化程序设计的概念和面向对象程序设计的概念, 算法和程序的基本结构,软件工程概述及软件开发活动,Visual Basic6.0 程序设计语言 等内容。 6.1 程序设计语言 6.1.1 程序设计语言分类 语言是人类用来表达意思,交流想法的工具。人类社会使用自然语言进行交流,如汉 语、英语、法语等,但计算机是不能直接执行人类自然语言的。程序设计语言是人与计算 机之间交换信息的工具,人是通过它来指挥计算机工作的。程序设计语言是一套表达计算 过程的符号系统,其表达形式能够同时被计算机和人所理解。 根据程序设计语言与计算机硬件的联系程度可将程序设计语言分为三类,即机器语言、 汇编语言和高级语言。前两类依赖于计算机硬件,又统称为低级语言。高级语言与计算机 硬件关系较小。因此,可以说程序设计语言经历了由低级向高级的发展过程。 1.机器语言 机器语言是用二进制数表示的、计算机唯一能理解和直接执行的程序语言。机器语言 中的每一条语句(称为指令)都是二进制形式的指令代码,如 1011000000001000。指令代 码一般由操作码和参与操作的操作数两部分组成,如机器指令 1011000000001000 中, 10110000 为操作码(指令的功能),00001000 为操作数(指令的对象),功能是将操作数 8 送累加器 AL。机器语言通常随着计算机型号的不同而不同,每一种型号的计算机所能执行 的全部指令的集合就是该型号计算机的指令系统。机器语言程序不直观,编写难度大,易 于出错,调试、修改繁琐,可移植性差,但执行速度最快。机器语言是最低级的程序设计 语言,目前除了在某些单板机上使用机器语言外,大部分计算机程序都不直接使用机器语 言编写。 2.汇编语言 汇编语言是将机器语言“符号化”的程序设计语言。在汇编语言中,用助记符代替机 器指令,如可用汇编指令 MOV AL,8 来代替上面的机器指令 1011000000001000。显然,这 比一串二进制代码容易书写和容易记忆。 汇编语言程序比机器语言程序易于编写、检查和修改,也保持了机器语言编程质量高、 运行速度快、占用存储空间少等优点。但汇编语言也是面向机器的语言,故通用性和可移 植性差,即:能在某一类计算机上运行的程序,却不能在另一类计算机上运行。汇编语言 也属于低级语言,它常用来编写实时系统以及高性能软件。 3.高级语言 高级语言是 50 年代后期发展起来的、面向问题求解过程的程序设计语言。与汇编语言 相比,高级语言更接近于人类的自然语言和数学语言,一般采用英语单词表达语句,便于 理解、记忆和掌握,如高级语言语句 c=a+b 的功能是将变量 a、b 的和存放在变量 c 中。高 级语言的一个语句通常对应多条机器指令,因而用高级语言编写的程序短小精悍,不仅便
于编写,而且易于查找错误和修改。高级语言通用性强,程序员不必了解具体机器的指令 就能编制程序,而且所编写的程序稍加修改或不用修改就能在不同的机器上运行,可移植 性好。目前常用的高级语言有: BASIC( Visual basic)、 FORTRAN、 Pascal(Delphi)、C、 C++、 COBOL、 PROLOG、Java等。 计算机语言与计算机科学的其他许多分支一样,有其科学的理论根据和严格的使用方 法,并且是在不断发展和完善的。计算机语言的发展过程如下: 第一代机器语言 第二代汇编语言 第三代面向过程的高级语言。 第四代面向对象的高级语言。 第五代智能化语言(正在研制中)。 6.1.2语言处理程序 台计算机只懂得本台机器的机器语言,它不能直接执行汇编语言或高级语言编写的 源程序。为了使计算机能够执行这些源程序,人们设计了一种特定的“翻译”程序,它能 将源程序翻译成目标程序,即机器语言程序来执行。这种翻译程序就是语言处理程序,常 用的语言处理程序有汇編编程序、解释程序和编译程序。汇编程序用来翻译用汇编程序编写 的源程序,解释程序和编译程序用来翻译用高级语言编写的源程序 1.汇编程序 把用汇编语言编写的源程序翻译成目标程序的程序称为汇编程序,翻译的过程称为汇 编”,执行的是目标程序。 2.编译程序 编译程序将高级语言源程序整个地翻译为机器指令表示的目标程序,使目标程序和源 程序在功能上完全等价,然后执行目标程序,得出运算结果。翻译的过程称为“编译”。典 型的编译型语言是 FORTRAN、 Pascal、C、C++等 3.解释程序 解释程序将高级语言源程序一句一句地翻译为机器指令,每译完一句就执行一句,当 源程序翻译完后,目标程序也执行完毕。典型的解释型语言是 Basic、Java,但现在也都 有了编译功能 6.1.3高级语言源程序的运行步骤 程序不是计算机程序设计中独有的概念,在日常生活中我们也常见到这个词,例如一 个会议日程、一场演出的节目单等,这些程序都是由人的一项一项活动组成,有序地完成 每一项活动也就实现了程序的目标 计算机程序是人们让计算机完成特定任务的一系列命令的集合。要把一个用高级语言 编好的源程序在计算机上进行运行并得到结果,需要多种软件的支持,如操作系统、编辑 软件、翻译程序、连接程序等。当翻译程序为编译程序时,一个源程序的运行步骤如图6-1 从图中可以看出一个程序的运行必须经过四个阶段:编辑→编译→连接→运行,即通 过编辑程序编辑和修改源程序,由编译程序将源程序编译为目标程序,再经过连接程序将
2 于编写,而且易于查找错误和修改。高级语言通用性强,程序员不必了解具体机器的指令 就能编制程序,而且所编写的程序稍加修改或不用修改就能在不同的机器上运行,可移植 性好。目前常用的高级语言有:BASIC(Visual Basic)、FORTRAN、Pascal(Delphi)、C、 C++、COBOL、PROLOG、Java 等。 计算机语言与计算机科学的其他许多分支一样,有其科学的理论根据和严格的使用方 法,并且是在不断发展和完善的。计算机语言的发展过程如下: 第一代 机器语言。 第二代 汇编语言。 第三代 面向过程的高级语言。 第四代 面向对象的高级语言。 第五代 智能化语言(正在研制中)。 6.1.2 语言处理程序 一台计算机只懂得本台机器的机器语言,它不能直接执行汇编语言或高级语言编写的 源程序。为了使计算机能够执行这些源程序,人们设计了一种特定的“翻译”程序,它能 将源程序翻译成目标程序,即机器语言程序来执行。这种翻译程序就是语言处理程序,常 用的语言处理程序有汇编程序、解释程序和编译程序。汇编程序用来翻译用汇编程序编写 的源程序,解释程序和编译程序用来翻译用高级语言编写的源程序。 1.汇编程序 把用汇编语言编写的源程序翻译成目标程序的程序称为汇编程序,翻译的过程称为“汇 编”,执行的是目标程序。 2.编译程序 编译程序将高级语言源程序整个地翻译为机器指令表示的目标程序,使目标程序和源 程序在功能上完全等价,然后执行目标程序,得出运算结果。翻译的过程称为“编译”。典 型的编译型语言是 FORTRAN、Pascal、C、C++等。 3.解释程序 解释程序将高级语言源程序一句一句地翻译为机器指令,每译完一句就执行一句,当 源程序翻译完后,目标程序也执行完毕。典型的解释型语言是 Basic、Java,但现在也都 有了编译功能。 6.1.3 高级语言源程序的运行步骤 程序不是计算机程序设计中独有的概念,在日常生活中我们也常见到这个词,例如一 个会议日程、一场演出的节目单等,这些程序都是由人的一项一项活动组成,有序地完成 每一项活动也就实现了程序的目标。 计算机程序是人们让计算机完成特定任务的一系列命令的集合。要把一个用高级语言 编好的源程序在计算机上进行运行并得到结果 ,需要多种软件的支持,如操作系统、编辑 软件、翻译程序、连接程序等。当翻译程序为编译程序时,一个源程序的运行步骤如图 6-1 所示。 从图中可以看出一个程序的运行必须经过四个阶段:编辑→编译→连接→运行,即通 过编辑程序编辑和修改源程序,由编译程序将源程序编译为目标程序,再经过连接程序将
目标程序连接成可执行程序,最后运行可执行程序得到结果。当某个阶段中出现了错误 则必须进行错误修改,直到没有错误为止。 编辑程序 编译程序 连接程序 程序 目标程序 可执行程序 结果 编辑 编译 连接 错 有错 不正确 图6-1高级语言源程序的运行步骤 6.1.4程序语言的选择 通常情况下,一项任务可以用多种编程语言来实现。为一项工程选择语言时,应该考 虑这种编程语言是否适合于手中的任务,这种语言在其他的应用程序中是否也经常使用, 开发小组成员是否都精通这门语言等一些问题。如果对这些问题的回答都是肯定的,那么 这门语言对这项工程是一个很好的选择 下面简单介绍几种当今流行的语言的特性,可帮助我们正确选择编程语言。 1.8086汇编语言 8086汇编语言是一种低级语言,由一些容易记忆的短语组成。8086汇编语言指令集只 适用于 Intel80x86系列微处理器,用它编写的程序只能在装有80x86系列微处理器的计 算机上运行。现在8086汇编语言主要用在那些程序尽可能短的或速度要求很高的场合。专 业程序员把8086汇编语言嵌入其他语言中(仅有部分高级语言支持嵌入功能)使程序执行 速度快,汇编语言也常用来编写系统软件以控制计算机硬件。 2. FORTRAN ORTRAN是 FORmula translating的缩写,意思是“公式翻译程序”,是1954年至1957 年间由 John Backus领导下的IBM的一个开发小组研制出的第一个高级程序语言。目前常 用的版本是 FORTRAN77和 FORTRAN90,是仍在使用的最早的高级语言,其他的高级语言 几乎都是直接或间接地从 FORTRAN发展而来。 FORTRAN90是按当代软件工程要求提出的若 干新观点、新理论设计的,对于数值型和计算功能支持较强,一般被科学家用来在大型机 或小型机上编制科学计算程序 3. BASIC和 Visual basic BASIC语言是为初级编程者设计的,它具有简单易学、小型通用的特点和人机会话交 互计算功能。自从1964年问世以来,已经出现了几种流行版本,如GW- BASIC、 QUICK- BASIC 等,目前仍在流行的是 Microsoft公司的 Visual basic。大部分版本是解释型的,但有些 支持编译。 Visual basic的集成开发环境支持调试时解释执行和对最终版本的编译,是当 前开发商业软件的理想工具之一,它所带的控件使开发可视化的图形用户界面和访问数据 库信息等变得非常简单和高效率。 4.C和C+ C语言的前身是 ALGOL68和B语言,是为了改写UNIX操作系统而诞生的,设计的初 衷就是为了编写系统软件和增加可移植性,它在多个UNIX平台和微机操作系统平台上有编
3 目标程序连接成可执行程序,最后运行可执行程序得到结果。当某个阶段中出现了错误, 则必须进行错误修改,直到没有错误为止。 图 6-1 高级语言源程序的运行步骤 6.1.4 程序语言的选择 通常情况下,一项任务可以用多种编程语言来实现。为一项工程选择语言时,应该考 虑这种编程语言是否适合于手中的任务,这种语言在其他的应用程序中是否也经常使用, 开发小组成员是否都精通这门语言等一些问题。如果对这些问题的回答都是肯定的,那么 这门语言对这项工程是一个很好的选择。 下面简单介绍几种当今流行的语言的特性,可帮助我们正确选择编程语言。 1.8086 汇编语言 8086 汇编语言是一种低级语言,由一些容易记忆的短语组成。8086 汇编语言指令集只 适用于 Intel 80x86 系列微处理器,用它编写的程序只能在装有 80x86 系列微处理器的计 算机上运行。现在 8086 汇编语言主要用在那些程序尽可能短的或速度要求很高的场合。专 业程序员把 8086 汇编语言嵌入其他语言中(仅有部分高级语言支持嵌入功能)使程序执行 速度快,汇编语言也常用来编写系统软件以控制计算机硬件。 2.FORTRAN FORTRAN 是 FORmula TRANslating 的缩写,意思是“公式翻译程序”,是 1954 年至 1957 年间由 John Backus 领导下的 IBM 的一个开发小组研制出的第一个高级程序语言。目前常 用的版本是 FORTRAN 77 和 FORTRAN 90,是仍在使用的最早的高级语言,其他的高级语言 几乎都是直接或间接地从 FORTRAN 发展而来。FORTRAN 90 是按当代软件工程要求提出的若 干新观点、新理论设计的,对于数值型和计算功能支持较强,一般被科学家用来在大型机 或小型机上编制科学计算程序。 3.BASIC 和 Visual Basic BASIC 语言是为初级编程者设计的,它具有简单易学、小型通用的特点和人机会话交 互计算功能。自从 1964 年问世以来,已经出现了几种流行版本,如 GW-BASIC、QUICK-BASIC 等,目前仍在流行的是 Microsoft 公司的 Visual Basic。大部分版本是解释型的,但有些 支持编译。Visual Basic 的集成开发环境支持调试时解释执行和对最终版本的编译,是当 前开发商业软件的理想工具之一,它所带的控件使开发可视化的图形用户界面和访问数据 库信息等变得非常简单和高效率。 4.C 和 C++ C 语言的前身是 ALGOL 68 和 B 语言,是为了改写 UNIX 操作系统而诞生的,设计的初 衷就是为了编写系统软件和增加可移植性,它在多个 UNIX 平台和微机操作系统平台上有编 编辑程序 编译程序 连接程序 源程序 目标程序 可执行程序 结果 编辑 编译 连接 运行 有错 有错 不正确
译系统,曾经是可移植性最好的语言。C语言是面向过程的程序设计语言,它带有汇编语 言的接口,可使有经验的程序员做到编程速度快、效率高。 C+语言是由C语言发展而来的,是C语言的超集,产生于20世纪80年代。它保留了 C语言的几乎全部特性,并增加了对象的支持,因此既可以进行过程化的程序设计,也可 以进行面向对象的程序设计。现在较流行的版本是 Microsoft的 isual o++和 Borland的 C++ Builder。C艹语言实现了类的封装、数据隐藏、继承及多态,使得其代码容易维护且 具有高可复用性 PROL0G是逻辑程序设计语言,出现于1971年。它以谓词逻辑为理论基础,最主要的 特征是能像人脑那样自动进行逻辑推理。PROL0G可用于程序正确性证明、自然语言理解 化学结构式分析以及法律、心理学、关系数据库、专家系统等许多领域的程序设计工作, Java是美国 SUN Microsystems公司于1995年3月推出的一种新型面向对象的编程语 言。Java语言具有面向对象性、简单性、动态性、可移植性、分布式、多进程、与平台无 关等特点。Java带来了一个崭新的编程环境,它可通过 Internet,实现计算机编程人员长 期以来一直追求的梦想:“编写一次,到处运行”。 另外,在互联网的应用中,还有大量的基于解释器的脚本语言,如HTML、 VBScript、 JavaScript等。脚本语言是一类专用语言,它将实用工具,库组件和操作系统命令整合为 个完整程序。脚本语言可以用来向计算机发送指令,但它们的语法和规则没有可编译的 编程语言那样严格和复杂。脚本语言主要用于格式化文本和使用以编程语言编写的已编译 好的组件 脚本语言以脚本的形式定义一项任务。脚本需要一个主机应用系统依附来运行,不能 单机运行。例如,用HML为显示网页编写一个脚本,这个脚本由网络浏览器解释,这里网 络浏览器就是主机应用系统,没有它,ⅢML脚本就不能运行 6.2计算机程序设计 程序是为了解决某一特定问题而用某一种计算机语言编写的指令序列,程序设计是用 某种计算机语言编写程序的过程,所以程序是程序设计的结果 计算机的工作方式有两种,一种是交互式,即人给计算机一个指令,计算机就完成 个操作;另一种是程序控制式,即先把计算机要完成的操作用一条条指令按序排好,然后 让计算机一步一步地执行这些指令序列,从而完成我们让计算机实现的功能,且整个指令 序列的执行过程不需要人工干预 在用高级语言进行程序设计时要注意以下3个概念 语法。每种计算机语言都有自己的语法规则,这些规则是非常严格的。在进行编译 时,系统会按语法规则严格检查程序,如有不符合语法规则的地方,计算机就会显示出语 法有错信息 2.语义。即某一语法成分的含义。例如, Visual basic语言中用“Dim”语句来显式 声明变量,用“ Print”方法来显示文本字符串和表达式的值,用“*”表示乘法,用“<” 表示不等于运算等。在使用时必须了解每一种语法成分的正确含义 3.语用。即正确使用语言。要善于利用语法规则中的有关规定和语法成分的含义有效
4 译系统,曾经是可移植性最好的语言。C 语言是面向过程的程序设计语言,它带有汇编语 言的接口,可使有经验的程序员做到编程速度快、效率高。 C++语言是由 C 语言发展而来的,是 C 语言的超集,产生于 20 世纪 80 年代。它保留了 C 语言的几乎全部特性,并增加了对象的支持,因此既可以进行过程化的程序设计,也可 以进行面向对象的程序设计。现在较流行的版本是 Microsoft 的 Visual C++和 Borland 的 C++ Builder。C++语言实现了类的封装、数据隐藏、继承及多态,使得其代码容易维护且 具有高可复用性。 5.PROLOG PROLOG 是逻辑程序设计语言,出现于 1971 年。它以谓词逻辑为理论基础,最主要的 特征是能像人脑那样自动进行逻辑推理。PROLOG 可用于程序正确性证明、自然语言理解、 化学结构式分析以及法律、心理学、关系数据库、专家系统等许多领域的程序设计工作。 6.Java Java 是美国 SUN Microsystems 公司于 1995 年 3 月推出的一种新型面向对象的编程语 言。Java 语言具有面向对象性、简单性、动态性、可移植性、分布式、多进程、与平台无 关等特点。Java 带来了一个崭新的编程环境,它可通过 Internet,实现计算机编程人员长 期以来一直追求的梦想:“编写一次,到处运行”。 另外,在互联网的应用中,还有大量的基于解释器的脚本语言,如 HTML、VBScript、 JavaScript 等。脚本语言是一类专用语言,它将实用工具,库组件和操作系统命令整合为 一个完整程序。脚本语言可以用来向计算机发送指令,但它们的语法和规则没有可编译的 编程语言那样严格和复杂。脚本语言主要用于格式化文本和使用以编程语言编写的已编译 好的组件。 脚本语言以脚本的形式定义一项任务。脚本需要一个主机应用系统依附来运行,不能 单机运行。例如,用 HTML 为显示网页编写一个脚本,这个脚本由网络浏览器解释,这里网 络浏览器就是主机应用系统,没有它,HTML 脚本就不能运行。 6.2 计算机程序设计 程序是为了解决某一特定问题而用某一种计算机语言编写的指令序列,程序设计是用 某种计算机语言编写程序的过程,所以程序是程序设计的结果。 计算机的工作方式有两种,一种是交互式,即人给计算机一个指令,计算机就完成一 个操作;另一种是程序控制式,即先把计算机要完成的操作用一条条指令按序排好,然后 让计算机一步一步地执行这些指令序列,从而完成我们让计算机实现的功能,且整个指令 序列的执行过程不需要人工干预。 在用高级语言进行程序设计时要注意以下 3 个概念。 1.语法。每种计算机语言都有自己的语法规则,这些规则是非常严格的。在进行编译 时,系统会按语法规则严格检查程序,如有不符合语法规则的地方,计算机就会显示出语 法有错信息。 2.语义。即某一语法成分的含义。例如,Visual Basic 语言中用“Dim”语句来显式 声明变量,用“Print”方法来显示文本字符串和表达式的值,用“*”表示乘法,用“<>” 表示不等于运算等。在使用时必须了解每一种语法成分的正确含义。 3.语用。即正确使用语言。要善于利用语法规则中的有关规定和语法成分的含义有效
地组成程序,以达到特定的目的。 6.2.1结构化程序设计 1969年,荷兰学者戴克斯特拉(E.W. Di jkstra)等提出了结构化程序设计( Structured Programming)的概念。结构化程序设计是“按照一组能够提高程序易读性与易维护性的规 则而进行程序设计的方法”,是面向过程的程序设计( Process- Oriented programming, PP),它从程序的结构和实施方法上讨论如何产生可读性好、可靠性高,且易于维护的程 结构化程序设计方法的基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶 段处理的问题都控制在人们容易理解和处理的范围内。它主要包括以下几方面内容 1.衡量程序质量的标准是“清晰第一、效率第二”。 2.要求程序设计者按一定规范书写程序,而不能随心所欲地设计程序。 3.程序由一些具有良好特性的基本结构组成,如顺序结构、选择结构和循环结构。由 这些基本结构顺序地构成一个结构化的程序。避免使用可能造成程序结构混乱的G0T0转向 语句 4.大型程序应分割成一些功能模块,并把这些模块按层次关系进行组织。 5.在程序设计时应采用“自顶向下、逐步细化”的实施方法。即将一个大任务先分成 若干个子任务,每一个子任务就是一个模块。如果某一个子任务还太复杂,还可以再分解 成若干个子任务,如此逐层分解。对一个模块的设计也是采取这种“自顶向下、逐步细化” 的方法,直到将它分解为上述基本结构为止。 按结构化程序设计方法设计出的程序,结构良好,各模块间的关系简单,每一个模块 都由基本结构组成。这样的程序清晰易读,可理解性好,容易设计,容易验证其正确性 也容易维护。同时,由于采用了“自顶向下、逐步细化”的实施方法,能有效地组织人们 的智力,有利于软件的工程化开发 6.2.2面向对象程序设计 面向对象的程序设计( Ob ject- Oriented Programming,OOP)于20世纪80年代初提出, 它起源于 Smalltalk语言。用面向对象的方法解决问题,不再将问题分解为过程,而是将 问题分解为对象。对象是现实世界中可以独立存在、可以被区分的一些实体,也可以是- 些概念上的实体,世界是由众多对象组成的。 对象有三个要素:属性、方法和事件。属性是对象的性质,是用于描述和反映对象特 征的参数。方法是对象的行为,即将一些通用的过程编写好并封装起来,作为方法供用户 直接调用。事件是响应对象的动作,它发生在用户与应用程序交互时,如单击控件按钮、 鼠标移动、键盘按下等。对象之间的相互作用通过消息传送来实现。消息是面向对象系统 中对象之间通信和请求任务的操作。消息传递是程序运行的基本处理活动。 面向对象的程序设计是一种系统化的程序设计方法,它不抛弃结构化程序设计方法, 而是站在比结构化程序设计更高、更抽象的层次上去解决问题。当它被分解为低级代码模 块时,仍需要结构化编程的方法和技巧,只是他分解一个大问题为小问题时采取的思路与 结构化方法不同。结构化的分解突出过程,强调的是如何做,代码的功能如何完成;面向 对象的分解突出现实世界和抽象的对象,强调的是做什么,它将大量的工作由相应的对象
5 地组成程序,以达到特定的目的。 6.2.1 结构化程序设计 1969 年,荷兰学者戴克斯特拉(E . W. Dijkstra)等提出了结构化程序设计(Structured Programming)的概念。结构化程序设计是“按照一组能够提高程序易读性与易维护性的规 则而进行程序设计的方法”,是面向过程的程序设计(Process-Oriented Programming, POP),它从程序的结构和实施方法上讨论如何产生可读性好、可靠性高,且易于维护的程 序。 结构化程序设计方法的基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶 段处理的问题都控制在人们容易理解和处理的范围内。它主要包括以下几方面内容: 1.衡量程序质量的标准是“清晰第一、效率第二”。 2.要求程序设计者按一定规范书写程序,而不能随心所欲地设计程序。 3.程序由一些具有良好特性的基本结构组成,如顺序结构、选择结构和循环结构。由 这些基本结构顺序地构成一个结构化的程序。避免使用可能造成程序结构混乱的 GOTO 转向 语句。 4.大型程序应分割成一些功能模块,并把这些模块按层次关系进行组织。 5.在程序设计时应采用“自顶向下、逐步细化”的实施方法。即将一个大任务先分成 若干个子任务,每一个子任务就是一个模块。如果某一个子任务还太复杂,还可以再分解 成若干个子任务,如此逐层分解。对一个模块的设计也是采取这种“自顶向下、逐步细化” 的方法,直到将它分解为上述基本结构为止。 按结构化程序设计方法设计出的程序,结构良好,各模块间的关系简单,每一个模块 都由基本结构组成。这样的程序清晰易读,可理解性好,容易设计,容易验证其正确性, 也容易维护。同时,由于采用了“自顶向下、逐步细化”的实施方法,能有效地组织人们 的智力,有利于软件的工程化开发。 6.2.2 面向对象程序设计 面向对象的程序设计(Object-Oriented Programming,OOP)于 20 世纪 80 年代初提出, 它起源于 Smalltalk 语言。用面向对象的方法解决问题,不再将问题分解为过程,而是将 问题分解为对象。对象是现实世界中可以独立存在、可以被区分的一些实体,也可以是一 些概念上的实体,世界是由众多对象组成的。 对象有三个要素:属性、方法和事件。属性是对象的性质,是用于描述和反映对象特 征的参数。方法是对象的行为,即将一些通用的过程编写好并封装起来,作为方法供用户 直接调用。事件是响应对象的动作,它发生在用户与应用程序交互时,如单击控件按钮、 鼠标移动、键盘按下等。对象之间的相互作用通过消息传送来实现。消息是面向对象系统 中对象之间通信和请求任务的操作。消息传递是程序运行的基本处理活动。 面向对象的程序设计是一种系统化的程序设计方法,它不抛弃结构化程序设计方法, 而是站在比结构化程序设计更高、更抽象的层次上去解决问题。当它被分解为低级代码模 块时,仍需要结构化编程的方法和技巧,只是他分解一个大问题为小问题时采取的思路与 结构化方法不同。结构化的分解突出过程,强调的是如何做,代码的功能如何完成;面向 对象的分解突出现实世界和抽象的对象,强调的是做什么,它将大量的工作由相应的对象
来完成,程序员在应用程序中只需说明要求对象完成的任务 面向对象程序设计具有如下优点: 1.符合人们习惯的思维方法 2.易于软件的维护和功能的增加 3.可重用性好 4.与可视化技术相结合,改善了工作界面。 6.3算法和程序的基本结构 6.3.1算法的概念 算法是对一个问题的解决方法和步骤的描述。计算机算法分为数值算法和非数值算法 两大类。一个算法应具有以下的特点: 1.有穷性。一个算法应当包括有限个操作步骤,或者说它是由一个有穷的操作系列组 成,而不应该是无限的。 2.确定性。算法中的每一步的含义都应该是淸楚无误的,不能模棱两可,也就是说不 应该存在“歧义性”。 3.一个算法应该有零个或多个输入。 4.一个算法应该有一个或多个输出。 5.有效性。一个算法必须遵循特定条件下的解题规则,组成它的每一个操作都应该是 特定的解题规则中允许使用的、可执行的,并且最后能得出确定的结果。 任何一个问题能否用计算机解决,一个关键的步骤就是看能否设计出它的算法,有了 合适的算法,再使用合适的程序设计语言就能方便地编写出程序 程序设计的目的就是要编写出描述正确,运行后能得到预期结果的程序。但如果仅仅 这样要求的话,就会带来一系列的麻烦,如可靠性差、用户难于使用、维护困难等,因此 必须研究和讲究程序设计方法,编写出高质量的程序 6.3.2算法的描述 可用自然语言、流程图、结构化流程图、伪代码等来描述一个算法。计算机程序就是 用计算机能够理解的信息(计算机语言)描述的算法 1.自然语言 即用人们使用的语言描述算法。例如: 第一步:算法开始 第二步:将a的值送给c 第三步:将b的值送给a 第四步:将c的值送给b 第五步:算法结束 这个算法的功能是将两个变量a和b的值互换,变量c是一个工作单元,用于临时存 放数据。 2.流程图 流程图是一种算法的图形描述工具。它用一些几何图框表示各种类型的操作,在框内
6 来完成,程序员在应用程序中只需说明要求对象完成的任务。 面向对象程序设计具有如下优点 : 1.符合人们习惯的思维方法。 2.易于软件的维护和功能的增加。 3.可重用性好。 4.与可视化技术相结合,改善了工作界面。 6.3 算法和程序的基本结构 6.3.1 算法的概念 算法是对一个问题的解决方法和步骤的描述。计算机算法分为数值算法和非数值算法 两大类。一个算法应具有以下的特点: 1.有穷性。一个算法应当包括有限个操作步骤,或者说它是由一个有穷的操作系列组 成,而不应该是无限的。 2.确定性。算法中的每一步的含义都应该是清楚无误的,不能模棱两可,也就是说不 应该存在“歧义性”。 3.一个算法应该有零个或多个输入。 4.一个算法应该有一个或多个输出。 5.有效性。一个算法必须遵循特定条件下的解题规则,组成它的每一个操作都应该是 特定的解题规则中允许使用的、可执行的,并且最后能得出确定的结果。 任何一个问题能否用计算机解决,一个关键的步骤就是看能否设计出它的算法,有了 合适的算法,再使用合适的程序设计语言就能方便地编写出程序。 程序设计的目的就是要编写出描述正确,运行后能得到预期结果的程序。但如果仅仅 这样要求的话,就会带来一系列的麻烦,如可靠性差、用户难于使用、维护困难等,因此 必须研究和讲究程序设计方法,编写出高质量的程序。 6.3.2 算法的描述 可用自然语言、流程图、结构化流程图、伪代码等来描述一个算法。计算机程序就是 用计算机能够理解的信息(计算机语言)描述的算法。 1.自然语言 即用人们使用的语言描述算法。例如: 第一步:算法开始; 第二步:将 a 的值送给 c; 第三步:将 b 的值送给 a; 第四步:将 c 的值送给 b; 第五步:算法结束。 这个算法的功能是将两个变量 a 和 b 的值互换,变量 c 是一个工作单元,用于临时存 放数据。 2.流程图 流程图是一种算法的图形描述工具。它用一些几何图框表示各种类型的操作,在框内
写上简明的文字或符号表示具体的操作,用箭头的流程表示操作的先后顺序。图6-2是ANSI (美国国家标准化协会)规定的一些常用的流程图符号 例如:从键盘输入三个不同的整数,并分别存放到变量x、y、z中,然后通过判断输 出三个数中的最大数(存放在变量max中)。选出三个数中最大数的算法流程图如图6-3 所示 起止框 判断框 处理框 输入输出框 连接点 流程线 图6-2常用的流程图符号 入口 输入x、y、z三个数 >Z max-x nax-z maxy max-Z 输出max 出口 图6-3选出三个数中最大数的算法 6.3.3程序的三种基本结构 结构化程序设计使用了三种基本结构:顺序结构、选择结构和循环结构。通过对这三 种基本结构的组合和嵌套就能实现任何单入口、单出口的程序 1.顺序结构 该结构是按照语句的书写顺序依次执行的,这是一种最简单的结构。如图6-4所示, 执行完A操作后再执行B操作 2.选择结构 该结构通过对条件的判断来选择一个分支执行。如图6-5所示,当条件为“真”时执 行A操作,当条件为“假”时执行B操作。注意,A、B两个操作不能同时执行。 3.循环结构 该结构在给定条件下,重复执行某操作,直到条件不满足为止。循环结构可分为以下
7 写上简明的文字或符号表示具体的操作,用箭头的流程表示操作的先后顺序。图6-2是ANSI (美国国家标准化协会)规定的一些常用的流程图符号。 例如:从键盘输入三个不同的整数,并分别存放到变量 x、y、z 中,然后通过判断输 出三个数中的最大数(存放在变量 max 中)。选出三个数中最大数的算法流程图如图 6-3 所示。 图 6-2 常用的流程图符号 图 6-3 选出三个数中最大数的算法 6.3.3 程序的三种基本结构 结构化程序设计使用了三种基本结构:顺序结构、选择结构和循环结构。通过对这三 种基本结构的组合和嵌套就能实现任何单入口、单出口的程序。 1.顺序结构 该结构是按照语句的书写顺序依次执行的,这是一种最简单的结构。如图 6-4 所示, 执行完 A 操作后再执行 B 操作。 2.选择结构 该结构通过对条件的判断来选择一个分支执行。如图 6-5 所示,当条件为“真”时执 行 A 操作,当条件为“假”时执行 B 操作。注意,A、B 两个操作不能同时执行。 3.循环结构 该结构在给定条件下,重复执行某操作,直到条件不满足为止。循环结构可分为以下 起止框 判断框 处理框 输入输出框 连接点 流程线 入口 x>y Y 出口 输入 x、y、z 三个数 x>z max=x max=z y>z max=y max=z 输出 max N Y Y N N
两种形式: (1)如图6-6(a)所示,这种循环结构的执行过程是先判断条件,当条件为“真” 时重复执行A操作,直到条件为“假”时为止。A操作可能一次也不被执行 (2)如图6-6(b)所示,这种循环结构的执行过程是先执行A操作,再判断条件 条件为“真”时重复执行A操作,直到条件为“假”时为止。A操作至少被执行一次。 入口 入口 条件 B 出口 图6-4顺序结构 图6-5选择结构 图6-4~图6-6中的A操作、B操作可以是一个简单的语句,也可以是一组语句或是 个基本结构。从图中可以看出,这三种基本结构具有以下特点: 1.只有一个入口。 2.只有一个出口。 3.无死语句(即永远执行不到的语句)。 4.无死循环(即无终止的循环)。 入口 入口 假 条件 出口 条件 出口假 图6-6循环结构 任何一个结构化程序都可以由这三种基本结构来构成。结构化程序要求每一个基本结 构具有单入口和单出口的性质是非常重要的。这是为了便于保证和验证程序的正确性。设 计程序时,一个结构一个结构地顺序写下来,整个结构如同一串珠子一样次序清楚,层次 分明。在修改程序时,可以将某一基本结构独立出来进行修改,在修改一个基本结构时, 不会影响到其它基本结构中的语句。 已经证明:由以上三种基本结构所构成的程序可以处理任何复杂的问题。一个结构化 程序是由具有以上特点的基本结构组成的,反过来说,一个结构化程序必定能分解为上述 基本结构。 6.4软件工程概述
8 两种形式: (1)如图 6-6(a)所示,这种循环结构的执行过程是先判断条件,当条件为“真” 时重复执行 A 操作,直到条件为“假”时为止。A 操作可能一次也不被执行。 (2)如图 6-6(b)所示,这种循环结构的执行过程是先执行 A 操作,再判断条件, 当条件为“真”时重复执行 A 操作,直到条件为“假”时为止。A 操作至少被执行一次。 图 6-4 顺序结构 图 6-5 选择结构 图 6-4~图 6-6 中的 A 操作、B 操作可以是一个简单的语句,也可以是一组语句或是 一个基本结构。从图中可以看出,这三种基本结构具有以下特点: 1.只有一个入口。 2.只有一个出口。 3.无死语句(即永远执行不到的语句)。 4.无死循环(即无终止的循环)。 (a) (b) 图 6-6 循环结构 任何一个结构化程序都可以由这三种基本结构来构成。结构化程序要求每一个基本结 构具有单入口和单出口的性质是非常重要的。这是为了便于保证和验证程序的正确性。设 计程序时,一个结构一个结构地顺序写下来,整个结构如同一串珠子一样次序清楚,层次 分明。在修改程序时,可以将某一基本结构独立出来进行修改,在修改一个基本结构时, 不会影响到其它基本结构中的语句。 已经证明:由以上三种基本结构所构成的程序可以处理任何复杂的问题。一个结构化 程序是由具有以上特点的基本结构组成的,反过来说,一个结构化程序必定能分解为上述 基本结构。 6.4 软件工程概述 条件 A 真 假 出口 入口 条件 真 出口 假 入口 A 入口 条件 真 假 出口 A B A 出口 B 入口
6.4.1软件及软件的特征 软件包括多个计算机程序、数据结构和文档。计算机程序在执行时能提供期望的功能 和性能:数据结构使得程序能够完全操纵信息:文档描述了程序的分析、设计、实现和维 护的细节及使用说明。软件有以下特征 1.软件是一种逻辑产品,与物质产品有很大的区别。 2.软件是开发出来的,一旦开发完成,通过复制就能产生大量的软件产品。 3.软件产品可能会被废弃,但不会被用坏,它是有生命周期的。 4.软件的生产主要是脑力劳动,目前还未完全摆脱手工开发方式 5.个体化的软件开发方式使得开发成本非常昂贵 6.软件必须具有可维护性、独立性、效率性和可用性。 6.4.2软件危机 1946年世界上出现第一台电子计算机以来,计算机技术发展十分迅速,其应用范围也 越来越广泛。计算机软件逐渐成为计算机系统的核心,没有软件就没有计算机的应用。由 于软件开发越来越复杂,程序人员越来越满足不了需要,致使软件产品质量难以满足各方 面的要求,再加上软件的生产率低,导致软件费用的上涨,到了六十年代末期,不可避免 地引发了软件危机( Software crisis),即软件成本高,质量低,不能按期交付使用,可 靠性差,生产效率低以及无法维护的状况。当时,有人统计美国的大型软件项目都有错误, 例如美国的阿波罗8号宇宙飞船,因一个计算机软件错误,造成一部分信息丢失,阿波罗 14号在10天飞行中出现了18个软件错误等等 为了解决软件危机,美国和西欧的一些计算机科学家,于1967年、1968年在欧洲召 开了两次软件可靠性国际会议。在1968年的会议上第一次提出了“软件工程”这个词和 软件工程技术。力图借助于现代工程原理来开发计算机程序及有关资料。其目的是要提 髙软件开发生产率和软件产品的质量。最初,人们认为软件就是计算机程序。后来,国际 标准化组织把软件定义为:“与计算机系统操作有关的程序、过程、及任何有关的文档资料。” 6.43软件工程的发展 软件工程( Software Engineering)是指运用工程学的知识和方法来指导软件的开发 工作,以提高软件质量和降低软件成本。软件工程的发展可以分为三个时期,即程序设计 时期、软件时期和软件工程时期。各个时期的主要特点如下: 1.程序设计时期(1946年~1954年) 程序由程序设计人员个体手工编制,软件作为硬件的一种附属品,只是为了计算机能 运行和作一些简单的计算及数据处理,程序还没有作为商品,工作效率很低,属手工业生 产方式。 2.软件时期(1955年~1970年) 程序生产方式为互助组式,主要采取由程序员小组进行编程的办法,当时社会上大量 需求软件,但软件人员缺乏且水平低。价格高、质量低、粗制滥造的软件大批涌向市场。 3.软件工程时期(1970年以后) 软件作为一种社会产品,批量生产,有标准化的生产过程,出现了大批软件公司和软
9 6.4.1 软件及软件的特征 软件包括多个计算机程序、数据结构和文档。计算机程序在执行时能提供期望的功能 和性能;数据结构使得程序能够完全操纵信息;文档描述了程序的分析、设计、实现和维 护的细节及使用说明。软件有以下特征: 1.软件是一种逻辑产品,与物质产品有很大的区别。 2.软件是开发出来的,一旦开发完成,通过复制就能产生大量的软件产品。 3.软件产品可能会被废弃,但不会被用坏,它是有生命周期的。 4.软件的生产主要是脑力劳动,目前还未完全摆脱手工开发方式。 5.个体化的软件开发方式使得开发成本非常昂贵。 6.软件必须具有可维护性、独立性、效率性和可用性。 6.4.2 软件危机 1946 年世界上出现第一台电子计算机以来,计算机技术发展十分迅速,其应用范围也 越来越广泛。计算机软件逐渐成为计算机系统的核心,没有软件就没有计算机的应用。由 于软件开发越来越复杂,程序人员越来越满足不了需要,致使软件产品质量难以满足各方 面的要求,再加上软件的生产率低,导致软件费用的上涨,到了六十年代末期,不可避免 地引发了软件危机(Software Crisis),即软件成本高,质量低,不能按期交付使用,可 靠性差,生产效率低以及无法维护的状况。当时,有人统计美国的大型软件项目都有错误, 例如美国的阿波罗 8 号宇宙飞船,因一个计算机软件错误,造成一部分信息丢失,阿波罗 14 号在 10 天飞行中出现了 18 个软件错误等等。 为了解决软件危机,美国和西欧的一些计算机科学家,于 1967 年、1968 年在欧洲召 开了两次软件可靠性国际会议。在 1968 年的会议上第一次提出了“软件工程”这个词和一 些软件工程技术。力图借助于现代工程原理来开发计算机程序及有关资料。其目的是要提 高软件开发生产率和软件产品的质量。最初,人们认为软件就是计算机程序。后来,国际 标准化组织把软件定义为:“与计算机系统操作有关的程序、过程、及任何有关的文档资料。” 6.4.3 软件工程的发展 软件工程(Software Engineering)是指运用工程学的知识和方法来指导软件的开发 工作,以提高软件质量和降低软件成本。软件工程的发展可以分为三个时期,即程序设计 时期、软件时期和软件工程时期。各个时期的主要特点如下: 1.程序设计时期(1946 年~1954 年) 程序由程序设计人员个体手工编制,软件作为硬件的一种附属品,只是为了计算机能 运行和作一些简单的计算及数据处理,程序还没有作为商品,工作效率很低,属手工业生 产方式。 2.软件时期(1955 年~1970 年) 程序生产方式为互助组式,主要采取由程序员小组进行编程的办法,当时社会上大量 需求软件,但软件人员缺乏且水平低。价格高、质量低、粗制滥造的软件大批涌向市场。 3.软件工程时期(1970 年以后) 软件作为一种社会产品,批量生产,有标准化的生产过程,出现了大批软件公司和软
件工厂,以软件作为计算机的中心,提出了一整套软件生产过程的基础理论、方法和工程 6.4.软件工程研究的内容 软件工程是指导软件开发和维护的工程类科学,它以计算机科学理论及其他相关学科 的理论为指导,采用工程化概念、原理、技术和方法进行软件的开发和维护,把经过时间 证明正确的管理措施和当前能够得到的最好的技术方法结合起来,以较少的代价获取高质 量的软件。软件工程研究的内容为:过程和模型、方法和技术、工具和环境、标准和规范。 软件工程管理则贯穿于这四个方面 1.过程和模型 所有软件开发和维护都是由一系列过程构成,它将方法和技术、工具和环境、标准和 规范有机地结合起来,以合理、及时地进行软件开发和维护。软件生存周期模型则将软件 工程过程有机结合起来,提供一个结构框架,明确主要活动和任务,忽略次要的细节,以 便于软件开发和维护的各类人员理解并适应不同的项目。因此,过程强调的是具体的活动 和任务等,模型则突出表现过程的有机结合。 2.方法和技术 软件开发和维护方法体现了进行软件开发和维护的人员看待系统的立场和观点。例如 结构化方法认为系统是由一些结构化的功能相互联系、相互作用而构成。面向对象方法则 认为系统是由一些对象的相互联系、相互作用而构成。技术则是方法的具体实现,由若干 步骤组成,突出“如何做”。例如,SASD( System Analysis/ System Design)是一种结构 化分析与设计技术,OMT( Object Mode ling Technique)是一种面向对象分析与设计技术 另外,还有一些与软件开发和维护有关的辅助技术,如软件可靠分析技术等 3.工具和环境 工具为软件开发和维护的方法、技术提供了自动或半自动的软件支持,以提高软件生 产效率,如编译程序等。将各种工具结合起来,连同有关的软硬件便形成软件开发和维护 环境,其目的是使软件工具支持整个软件生存周期 工具和环墙层 该层为实现过程和模型提供了具体方式 方法和技术层 该层为实现讨程和模型擤供了具体方式 讨程和模型层 该层为方法和技术提供了活动框架 标准和规范层 该层是保证软件质量的关键 质量核心层 图6-7软件工程层次结构 4.标准和规范 标准化及规范化可以使各工程工作有章可循,进而提高生产效率和产品质量。软件工 程标准主要有五个层次:国际标准、国家标准、行业标准、企业规范和项目规范。 任何工程化方法都一定是围绕高质量这一核心的,如图6-7所示,软件工程研究的四 个内容也构成了以软件质量为核心的层次结构
10 件工厂,以软件作为计算机的中心,提出了一整套软件生产过程的基础理论、方法和工程 系统。 6.4.4 软件工程研究的内容 软件工程是指导软件开发和维护的工程类科学,它以计算机科学理论及其他相关学科 的理论为指导,采用工程化概念、原理、技术和方法进行软件的开发和维护,把经过时间 证明正确的管理措施和当前能够得到的最好的技术方法结合起来,以较少的代价获取高质 量的软件。软件工程研究的内容为:过程和模型、方法和技术、工具和环境、标准和规范。 软件工程管理则贯穿于这四个方面。 1.过程和模型 所有软件开发和维护都是由一系列过程构成,它将方法和技术、工具和环境、标准和 规范有机地结合起来,以合理、及时地进行软件开发和维护。软件生存周期模型则将软件 工程过程有机结合起来,提供一个结构框架,明确主要活动和任务,忽略次要的细节,以 便于软件开发和维护的各类人员理解并适应不同的项目。因此,过程强调的是具体的活动 和任务等,模型则突出表现过程的有机结合。 2.方法和技术 软件开发和维护方法体现了进行软件开发和维护的人员看待系统的立场和观点。例如, 结构化方法认为系统是由一些结构化的功能相互联系、相互作用而构成。面向对象方法则 认为系统是由一些对象的相互联系、相互作用而构成。技术则是方法的具体实现,由若干 步骤组成,突出“如何做”。例如,SA/SD(System Analysis/System Design)是一种结构 化分析与设计技术,OMT(Object Modeling Technique)是一种面向对象分析与设计技术。 另外,还有一些与软件开发和维护有关的辅助技术,如软件可靠分析技术等。 3.工具和环境 工具为软件开发和维护的方法、技术提供了自动或半自动的软件支持,以提高软件生 产效率,如编译程序等。将各种工具结合起来,连同有关的软硬件便形成软件开发和维护 环境,其目的是使软件工具支持整个软件生存周期。 图 6-7 软件工程层次结构 4.标准和规范 标准化及规范化可以使各工程工作有章可循,进而提高生产效率和产品质量。软件工 程标准主要有五个层次:国际标准、国家标准、行业标准、企业规范和项目规范。 任何工程化方法都一定是围绕高质量这一核心的,如图 6-7 所示,软件工程研究的四 个内容也构成了以软件质量为核心的层次结构。 质量核心层 标准和规范层 过程和模型层 方法和技术层 工具和环境层 该层为实现过程和模型提供了具体方式 该层为实现过程和模型提供了具体方式 该层为方法和技术提供了活动框架 该层是保证软件质量的关键