软件工程11

上传人:xy****7 文档编号:94168205 上传时间:2019-08-03 格式:PPT 页数:42 大小:139KB
返回 下载 相关 举报
软件工程11_第1页
第1页 / 共42页
软件工程11_第2页
第2页 / 共42页
软件工程11_第3页
第3页 / 共42页
软件工程11_第4页
第4页 / 共42页
软件工程11_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《软件工程11》由会员分享,可在线阅读,更多相关《软件工程11(42页珍藏版)》请在金锄头文库上搜索。

1、软件工程,第十一讲,Chap.10 软件编码,软件开发工作沿着生存期的顺序,逐步推进,最终要得到能在计算机上运行的程序,我们通常称它为源程序。把软件设计作进一步转换,产生源程序过程,称为编码阶段。 软件工程项目对代码编写的要求,绝不仅仅是源程序语法的正确性,也不只是源程序中没有各种错误,它还要求源程序具有良好的结构性和良好的程序设计风格(programming style)。,Chap.10 软件编码,本章并不讨论如何用某种语言编写某个具体程序的问题,而是讨论与编码有关的基本问题。,10.1 结构化程序设计,结构化程序设计是60年代末至70年代形成的技术,它主要包括两个方面: 对代码编写时使用

2、控制结构的要求,强调使用三种基本结构,避免使用可能降低程序结构性的转向语句。 在软件开发的设计与实现过程中,提倡采用自顶向下(Top-down)和逐步细化(Stepwise refinement)的原则。,10.1 结构化程序设计,一、结构化程序与结构化语言 早在1963年ALGOLGO语言的主要作者Peter Naur提出,在程序中由于大量的、无限制地使用GOTO语句,使得程序结构非常混乱。许多转向语句把程序的各个部分勾联在一起,如同一堆乱麻。参见图A所示。,10.1 结构化程序设计,图A 纷乱如麻的程序结构,10.1 结构化程序设计,1965年E.W.Dijkstra提出,由于GOTO语句

3、造成程序结构的混乱,致使程序质量下降。为了解决这一问题,应该把GOTO语句从高级语言中取消。 1966年Bohm和Jacopini证明了任何单入口和单出口,且没有“死循环”的程序都能由三种最基本的控制结构构造出来。,10.1 结构化程序设计,70年代初N.Wirth在设计Pascal语言时对GOTO语句的处理可被当作对GOTO语句争论的结论。在Pascal语句中没有支持上述三种基本控制构造的语句;另一方面,GOTO语句仍然保留在该语言中。不过N.Wirth解释说,通常使用所提供的几种控制语句已经足够了,习惯于这样做的人不会感到GOTO语句的必要。也就是说,一般情况下,可以完全不用GOTO语句。

4、如果在特殊情况下,由于特定的要求,偶然使用GOTO语句能解决问题,那也未尝不可,只是不应大量使用它罢了。,10.1 结构化程序设计,早期的程序设计语言,由于没有考虑到程序结构化的要求,当然没有直接支持几种基本控制结构的特性。比如FORTRAN、COBOL、ALGOL和BASIC语言中大都没有一些与基本控制结构相对应的控制语句。我们称这些语言为非结构化程序设计语言。 对于那些考虑到结构化要求的新程序,如Pascal、C等,由于具有与基本控制结构对应的控制语句,可以直接编写出结构化程序来,我们称之为结构化程序设计语言。,10.1 结构化程序设计,二、自顶向下与逐步细化 自顶向下与逐步细化是结构化程

5、序设计的原则,它把整个设计过程分出层次来,逐步加以解决。每一步是在前一步的基础上进行的,是前一步设计的细化和具体化。这可以从一个树结构图上来理解(参看图B)。树结构上每一层都由一些要解决的问题,这些问题往往是相互独立的。各层结点表示各个步骤,在每一结点上都要解决怎样进一步分解,怎样细化的问题,以便得到在它下面的各个子女结点。这种做法就把一个原来复杂的大问题,划分为多个容易解决的小问题,最后整个问题得到逐步解决。,10.1 结构化程序设计,自顶向下,图B 自顶向下,逐步细化的树结构,10.1 结构化程序设计,按照自顶向下、逐步细化的原则进行设计有着许多好处,比如: 同一层结点上的细化工作彼此独立

6、无关。 任何一步发生了错误,只能影响到它所在树枝的子女节点。 测试工作可按顺序,逐个节点独立进行,最后再集成。 每一步工作仅在上层节点基础上做不多的设计扩展,便于检查。 有利于设计的分工和组织工作。,10.1 结构化程序设计,为进一步说明自顶向下、逐步细化的设计原则,这里再给出一个用C语言开发程序的实例。该例要求利用筛选法求100以内的质数。所说的筛选法,是从2至100中去掉2,3,9,10的倍数,剩下的便是100以内的质数。以下分为6步,逐步建立程序: 第一步:从2100中筛弃210的倍数 第二步:建立2100的表 若X在表中,且X是210中任一数的 倍数,则去掉X。,10.1 结构化程序设

7、计,第三步:建立数组A100, 其中某一元素Ai=i若是2-10中任一数的 倍数,则去掉Ai, 第四步:建立数组A100, 其中某一元素Ai=I若是2,3,5,7中任一数 的倍数,则去掉Ai,10.1 结构化程序设计,第五步:for(i=2;i=100;i+) Ai=i; (对于j=2,3,5,7) for(i=2;i=100;i+) if(Ai/j*j=Ai) Ai=0; for(i=2;i=100;i+) if(Ai!=0; printf(“A%d=%d/n”,i,Ai);,10.1 结构化程序设计,第六步:for(i=2;i=100;i+) Ai=i; B1=2;B2=3;B3=5;B4

8、=7; for(j=1;j4;j+) for(i=2;i=100;i+) if(Ai/Bj*Bj=Ai) Ai=0; for(i=2;i=100;i+) if(Ai!=0) printf(“A%d=%d/n”,i,Ai);,10.1 结构化程序设计,三、H.Mills指出,结构化程序设计问题除去从控制结构入手,消除不适当使用的GOTO语句外,还有数据结构的不合理使用的情况。使控制结构合理化只是解决结构化程序设计问题的初步成果,下一步还应解决数据访问的合理化和规范化问题。,10.1 结构化程序设计,目前在许多程序中广泛地使用着数组和指针,对于这两种数据结构中元素的存取完全依赖于它们的下标值,实际

9、上下标的取值是随机的。这一混乱存取的现象和使用GOTO语句一样对程序是十分有害的。H.Mills建议用栈结构和队结构去代替数组和指针,使得数据的存取分别遵循后进先出(LIFO)和先进先出(FIFO)的规律合理而规范的进行。有人已经证明在程序中用栈和队把数组和指针替换掉是完全可能的。H.Mills说,我们期待着这一论点尽快为人们普遍接受,但恐怕至少需要十年时间。,10.2 程序设计风格,编程序与写文章一样,程序不仅仅要被计算机理解和执行,还要经常被人阅读。例如,设计测试用例、排错、修改扩充时都要程序设计者和其他人来阅读。因此,程序设计者应养成好的程序设计风格。,10.2 程序设计风格,一个逻辑虽

10、然完全正确,但杂乱无章的程序是不受欢迎的,因为它无法供人阅读,难于测试、排错和维护。研究文学的人会逐渐熟悉某个具体作家的风格,经常阅读别人程序的人也会发现程序员有其各自的风格。什么样的编码风格才是好的风格,Kernighan和Plauger所著的程序设计风格的基础一书有精彩的论述,值得一读。,10.2 程序设计风格,为了提高程序的可读性,选取有意义的标识符名字对于理解代码是很必要的。无论是对大程序还是小程序,有意义的标识符都会有助于理解。当然不是说名字越长越好,太长了不仅难记,还增加了出错的可能。 注解是软件开发人员与源程序的其他读者之间信息交流的方式之一。注解在软件生命期的维护阶段可以对维护

11、者理解程序提供清楚的指导,注解可分为序言性注解和功能性注解。,10.2 程序设计风格,序言性注解和功能性注解使用的范围和方法不同。序言性注解应该安排在每个模块的首部,其格式如下: 1.模块功能。 2.接口描述包括“调用序列”的样例、对参数的描述、所有从属于此模块的模块表。 3.对有关数据的讨论,如重要的变量和它们的用途、约束和限制以及其他要说明的信息。 4.开发日志,包括模块的设计者、复查人员及复查日期、修改人、修改日期及对修改的描述。,10.2 程序设计风格,大型软件系统一般都是由多人同时并行编码的,分配的原则是以模块为单位,为了便于测试和维护,为每个模块书写一个序言性注解是必要的。,10.

12、2 程序设计风格,功能性注解嵌在语言程序内部用来描述处理功能。注解不仅仅是解释程序代码,还提供一些必要的附加说明。此外,书写功能性注解还应该注意: 1.描述程序块,而不是解释每一行代码。 2.使用空行、空格或括号,使得注解与代码容易区分。 3.注解要正确,错误的或容易引起误解的注解还不如没有注解。,10.3 程序设计语言,编写程序代码与程序设计语言的选择有很大关系。程序设计语言的特性和设计风格对于设计程序代码的难易程度和质量有着直接影响,所以有必要对程序设计语言做一些讨论。,10.3.1 程序设计语言的理论基础,表10.1列出了各类语言所依赖的数学、元计算模型和计算模型,由于按计算理论的证明,

13、各类语言所依赖的元计算模型是等价的,因此,现有程序设计语言的功能也是等价的。所谓语言功能等价指的是用A语言编写的某一问题的求解程序,用B语言也能编写出同一问题的语义等价的求解程序。我们认为,语言之间的差别在描述问题的方便性方面的差别,即某种语言适合于描述某类问题,另外的语言适合于描述另外的问题。,10.3.1 程序设计语言的理论基础,程序设计语言的理论基础,数学,布尔代数,数理逻辑,组合数学,元计数模型,计算模型,Turing,Post机,冯.诺依 曼结构,ASSEMBLER FORTRAN COBOL C PASCAL ADA SMALLTALK,一阶逻辑 归结原理,组合算子 入归约,产生式

14、 系统,语言,一阶谓词演算,组合算子演算,OPS5,PROLOG,LISP,FP,表10.1,10.3.2 程序设计语言的类型,从50年代中期至60年代末期,计算机软件工作者把主要精力用于语言的设计上,从汇编程序设计语言到Ada语言,研究出许许多多的通用程序设计语言。近50年程序设计语言的发展过程可简单的用图10.3表示。,10.3 程序设计语言,Imperative,Language,Assember Fortran 、77 Algol58、60、68 PL/I Pascal c . . . Ada Oopl,etc.,lisp,Logic Language,PROLOG,FP、SASL,N

15、onimperative Language,Function Language,图10.3 程序设计语言的发展过程,10.3 程序设计语言,从上述分析可把语言分为两大类型:通用语言和专用语言。按应用领域的方便性来划分,又可把通用语言分为: 1.用于科学计算的语言:Fortran、Algol、Pascal、C等。 2.用于系统软件设计的语言:Assmbler、Pascal、C、Modula等。 3.商用数据处理语言:COBOL、PL/I、DBASE II、 DBASE III、 DBASE III+、FOXBASE、FOXPRO、SQL、SYBASE、ORACLE等,10.3 程序设计语言,4.

16、人工智能语言:Lisp、Prolog、FLL等。 5.实时计算机系统:汇编语言、Ada、其他实时处理语言。 6.面向对象语言:SMALLTALK、C+等。 必须再次强调,并不是语言功能上有差别而只描述某类问题而不能描述另一类问题,只是某种语言更适合于描述某种问题。如今,语言的发展已成为基于某种语言构造的程序设计环境,即提供一组编程工具,并构造一个协调的编程环境,如Visual BASIC、Visual Pascal、Delphi、C+、JAVA等。,10.3.3 编码语言的选择,语言选择的准则是: 1.项目的应用领域 这是选择语言的最关键因素。在其他条件都具备的情况下,尽量选取适合某个应用领域的语言。可参考上节的语言分类。,10.3.3 编码语

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号