来完成,程序员在应用程序中只需说明要求对象完成的任务 面向对象程序设计具有如下优点: 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 所示,软件工程研究的四 个内容也构成了以软件质量为核心的层次结构。 质量核心层 标准和规范层 过程和模型层 方法和技术层 工具和环境层 该层为实现过程和模型提供了具体方式 该层为实现过程和模型提供了具体方式 该层为方法和技术提供了活动框架 该层是保证软件质量的关键