软件工程课本讲解第4章程序编码.ppt
《软件工程课本讲解第4章程序编码.ppt》由会员分享,可在线阅读,更多相关《软件工程课本讲解第4章程序编码.ppt(115页珍藏版)》请在三一办公上搜索。
1、程序编码,编码阶段的任务结构化程序设计 程序设计风格 程序效率 程序复杂性度量,做为软件工程过程的一个阶段,程序编码是设计的继续。程序设计语言的特性和程序设计风格会深刻地影响软件的质量和可维护性。为了保证程序编码的质量,程序员必须深刻理解、熟练掌握并正确地运用程序设计语言的特性。此外,还要求源程序具有良好的结构性和良好的程序设计风格。,4.1 编码阶段的任务,模块的过程性描述(不可执行的),源程序(可执行的),二.源程序要求正确可靠、简明清晰、效率高。1.源程序的正确性是对程序质量的最基本要求;2.源程序的简明清晰,才便于验证源代码和模块规格说明的一致 性,容易进行测试和维护;3.源程序的清晰
2、与效率之间常存在矛盾,要求清晰性好的程序一 般效率较低,而要求效率高的程序一般清晰性较差。对于大多 数模块,编码时应该把简明清晰放在第一位。4.除了编码阶段产生源代码外,在测试阶段也需要编写一些测试 程序,用于对软件的测试。,一.编码的目的:使用选定的程序设计语言,把模块的过程性描述翻 译为用语言书写的源程序(源代码)。,补充:程序设计语言的发展(1),面向机器的语言,二.面向机器的语言 包括第一代机器语言和第二代汇编语言。这两种语言都依赖于计算机结构,其指令系统随机器而异。为它所支持的计算机独有。该语言编程效率低、容易出错,且维护困难。,一.程序设计语言的发展 按软件工程的观点,语言的发展大
3、致可分为四代、三个阶段。如图:,ALGOL语言随着Pascal语言的问世,也被新语言取代。,用于一般数值计算与事务处理。简单易懂、具有交互性,是初学者学习程序设计语言的入门语言。,早期版本不支持结构程序设计,解释执行速度慢,不适用于大的软件开发。新版本有较大改进。,主要用于科学计算。新版本在支持结构化控制和字符串处理方面有较大改进。,数据类型不丰富,对复杂的数据结构缺乏支持。,商业数据处理。广泛支持与事务数据处理有关的各种过程技术。近似自然语言,易于理解。,计算功能弱,编译速度不快。,三.高级语言:不依赖于实现它的计算机,它使用的概念和符号接近于自然的 语言。按其特点分为三类:1.基础语言:如
4、BASIC、FORTRAN、COBOL、ALGOL等。该类语言历史久、流传广,且有用它们开发的大量软件,它们的版本 不断进行改进,现今仍被广泛的使用。,科学计算、数据处理及系统软件开发。模块清晰、控制结构完备,有丰富的数据类型和数据结构,表达能力强,易于移植。但不支持大型软件的开发和设计,有希望成为微机和小型机上的软件开发语言。,具有结构化语言的公共特征,表达简洁、控制结构与数据结构完备,移植力强、编译质量高。不仅能写出效率高的应用软件,也适用于编写OS、编译程序等系统软件。如UNIX中90%以上的代码是C语言。,面向过程的现代语言,适用于一切“嵌入式计算机系统”除具有许多经典语言的特征外,还
5、包含许多新特征。支持并发处理与过程间通信,支持异常处理中实施中断及只能由汇编语言实现的低级操作等。在语言的表达与结构上又具有高级语言特点,远比汇编语言易于开发和维护。它是第一个充分体现软件工程思想的语言,它既是编码语言,又可用作设计表达工具。,2.现代语言:如PASCAL、C、Ada等;它们都支持结构化的控制结构,具有很强的过程结构和数据结构能力,因此也称为结构化语言(structured language)。,3.专用语言 基础语言与现代语言都属于通用语言。专用语言不同,它是 为某一特定的应用专门设计的语言。例如:(1)专用于处理数组和向量的APL语言;(2)数控机床用的APT语言;(3)适
6、用于微处理器开发的FORTH语言;(4)适用于处理符号和表达式的LISP语言等。从软件工程的角度看,这类语言仅支持特殊的应用,把软件需 求转换为设计,再从设计转换为实现,较通用语言容易。但它们 的可移植性与可维护性都不及通用语言。,过程化语言。,非过程化语言。,面向过程,说明“怎么做”。,面向应用,说明“做什么”。,高效的实现各种算法。,直接地实现各类应用系统。,着重算法描述,一次仅处理一个记录或数据元素。,以数据或知识为基础,以对集合的处理代替对于单元记录或元素的处理。,不支持对大量共享数据的处理。,支持对大型数据库的高效处理。,四.第四代语言 1.第三代语言(3GL)与第四代语言(4GL)
7、的区别。,2.第四代语言(4GL)应具备的特征(1)具有很强的数据管理能力,能对数据库进行有效的存取、查 询和其它有关操作;(2)能提供一组高效的、非过程化的命令,组成语言的基本语句。编程时用户只需用这些命令说明“做什么”,不必描述实现的 细节;(3)能满足多功能、一体化的要求。为此,语言中除必须含有控 制程序逻辑与实现数据库操作的语句外,还应包括生成与处 理报表、表格、图形,以及实现数据运算和分析统计功能的 各种语句,共同构成一个一体化的语言,以适应多种应用开 发的需要。例如,SQL关系数据语言是最早的4GL语言。,补充:程序设计语言的特点和选择,一.程序设计语言的特点 1.名字说明:程序中
8、使用对象的名字,能为编译程序所检查和识别;2.类型说明:定义对象的类型,确定该对象的使用方式;3.初始化:为变量提供适当的初始值或由系统给变量赋一特殊的表明 尚未初始化的值;4.程序对象的局部性:程序中真正需要的那部分才能访问的对象;5.程序模块:控制程序对象的名字;6.循环控制结构:如FOR语句、WHILE-DO语句、REPEAT-UNTIL语句等;7.分支控制结构:如IF语句、CASE语句等;8.异常处理:为程序运行过程中发生的错误和意外事件提供检测和处 理上的帮助;9.独立编译:能分别编译各个程序单元。,程序设计语言的特点和选择,二.程序设计语言的选择 1.为用户熟悉、便于用户维护的语言
9、。2.运行目标系统的环境中可以提供的编译程序所能选用的语言。3.根据可以得到的软件工具,能在支持程序开发中可以利用的语言。4.根据工程规模的大小、目标系统应用范围选择专用的语言,如实时 应用选择Ada语言或汇编语言,系统软件开发选择C语言或汇编语言,软件开发中若含有大量数据操作则选择SQL、dBASE、VF等数据库语言等。5.程序员熟悉的语言。6.标准化程度高、程序可移植性好的语言。7.根据算法与计算的复杂性、数据结构的复杂性。如对于系统程序和 结构复杂的应用程序,选择支持数组、记录(或结构)与指针的动态 数据结构的Pascal语言或C语言。8.根据实时要求系统需要的响应速度和效率。,4.2
10、结构化程序设计,结构化程序设计主要包括两方面:在编写程序时,强调使用几种基本控制结构,通过组合嵌套,形成程序的控制结构。尽可能避免使用GOTO语句。在程序设计过程中,尽量采用自顶向下和逐步细化的原则,由粗到细,一步步展开。,4.2.1结构化程序设计的主要原则,使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑。选用的控制结构只准许有一个入口和一个出口。程序语句组成容易识别的块,每块只有一个入口和一个出口。复杂结构应该用基本控制结构进行组合嵌套来实现。,语言中没有的控制结构,可用一段等价的程序段模拟,但要求该程序段在整个系统中应前后一致。严格控制GOTO语句,仅在下列情形才可使用:用一
11、个非结构化的程序设计语言去实现一个结构化的构造。若不使用GOTO语句就会使程序功能模糊。在某种可以改善而不是损害程序可读性的情况下。,例1 打印A,B,C三数中最小者程序,程序1 if(A B)goto 120;if(B C)goto 110;100 write(C);goto 140;110 write(B);goto 140;120 if(A C)goto 130;goto 100;130 write(A);140 end,程序2 if(A B)and(A C)then write(A)else if(A B)and(B C)then write(B)else write(C)endif
12、endif,(略)例2 用二分法求方程 f(x)0 在区间a.b中的根的程序,假设在闭区间a.b上函数 f(x)有唯一的一个零点,f0=f(a);f1=f(b);/程序1 if(f0*f1 0)x0=xm;f0=fm;else x1=xm;,finish:printf(“n The root of this equation is%dn”,xm);单入口,两出口正常出口是循环达到 n 次,非正常出口是循环中途控制转出到标号 finish 所在位置可读性好,f0=f(a);f1=f(b);/程序2 if(f0*f1=0)x0=a;x1=b;for(i=1;i=n;i+)xm=(x0 x1)/2;
13、fm=f(xm);if(abs(fm)eps|abs(x1x0)eps)break;if(f0*fm0)x0=xm;f0=fm;else x1=xm;,f0=f(a);f1=f(b);/程序3 if(f0*f1=0)x0=a;x1=b;i=1;finished=0;while(i=n&finished=0)xm=(x0 x1)2;fm=f(xm);if(abs(fm)eps|abs(x1x0)eps)finished=1;if(finished=0),if(f0*fm0)x0=xm;f0=fm;else x1=xm;引入布尔变量 finished,改 for 型循环为 while 型,将单入口
14、多出口结构改为单入口单出口结构。,自顶向下,逐步求精,在详细设计和编码阶段,应当采取自顶向下,逐步求精的方法。把一个模块的功能逐步分解,细化为一系列具体的步骤,进而翻译成一系列用某种程序设计语言写成的程序。,例:用筛选法求100以内的素数,筛选法就是从2到100中去掉2,3,9,10的倍数,剩下的就是100以内的素数。为了解决这个问题,可先按程序功能写出一个框架。,main()/程序框架 建立2到100的数组A,其中Aii;-1 建立2到10的素数表 B,其中存放2 到10以内的素数;-2 若Aii是B 中任一数的倍数,则 剔除Ai;-3 输出A 中所有没有被剔除的数;-4,main()/*建
15、立2到100的数组A,其中Aii*/for(i=2;i=100;i+)Ai=i;/*建立2到10的素数表B,其中存放2到 10以内的素数*/B1=2;B2=3;B3=5;B4=7;/*若Aii是B 中任一数的倍数,则剔 除Ai*/for(j=1;j=4;j+)检查A 所有的数能否被Bj整除并将 能被整除的数从A 中剔除;-3.1,/*输出A 中所有没有被剔除的数*/for(i=2;i=100;i+)若Ai没有被剔除,则输出之-4.1对框架中的局部再做细化,得到整个程序。,main()/*建立2到100的数组A,其中Aii*/for(i=2;i=100;i+)Ai=i;/*建立2到10的素数表B
16、,其中存放2到 10以内的素数*/B1=2;B2=3;B3=5;B4=7;/*若Aii是B 中任一数的倍数,则剔除 Ai*/for(j=1;j=4;j+)/*检查A 所有的数能否被Bj整除并将能 被整除的数从A 中剔除*/,for(i=2;i=100;i+)if(AiBj*Bj=Ai)Ai=0;/*输出A 中所有没有被剔除的数*/for(i=2;i=100;i+)/*若Ai没有被剔除,则输出之*/if(Ai!=0)printf(“A%d%dn”,I,Ai);,自顶向下,逐步求精方法的优点,符合人们解决复杂问题的普遍规律。可提高软件开发的成功率和生产率用先全局后局部,先整体后细节,先抽象后具体的
17、逐步求精的过程开发出来的程序具有清晰的层次结构,程序容易阅读和理解,程序自顶向下,逐步细化,分解成一个树形结构。在同一层的节点上的细化工作相互独立。有利于编码、测试和集成每一步工作仅在上层节点的基础上做不多的设计扩展,便于检查有利于设计的分工和组织工作。,4.3 程序设计风格,程序实际上也是一种供人阅读的文章,有一个文章的风格问题。应该使程序具有良好的风格。源程序文档化 数据说明 语句结构 输入输出方法,一.源程序文档化,符号名的命名程序注释 程序的视觉组织,1.符号名的命名,符号名即标识符,包括模块名、变量名、常量名、标号名、子程序名、数据区名以及缓冲区名等。这些名字应能反映它所代表的实际东
18、西,应有一定实际意义。例如,表示次数的量用Times,表示总量的用Total,表示平均值的用Average,表示和的量用Sum等。,名字不是越长越好,应当选择精炼的意义明确的名字。必要时可使用缩写名字,但这时要注意缩写规则要一致,并且要给每一个名字加注释。同时,在一个程序中,一个变量只应用于一种用途。例:NBALAP N,2.程序的注释,夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段。注释决不是可有可无的。一些正规的程序文本中,注释行的数量占到整个源程序的13到12,甚至更多。注释分为序言性注释和功能性注释。,序言性注释,通常置于每个程序模块的开头部分,它应当给出程序的整体说明,对
19、于理解程序本身具有引导作用。有些软件开发部门对序言性注释做了明确而严格的规定,要求程序编制者逐项列出。有关项目包括:程序标题;,有关本模块功能和目的的说明;主要算法;接口说明:包括调用形式,参数描述,子程序清单;有关数据描述:重要的变量及其用途,约束或限制条件,以及其它有关信息;模块位置:在哪一个源文件中,或隶属于哪一个软件包;开发简历:模块设计者,复审者,复审日期,修改日期及有关说明等。,功能性注释,功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎么样。而不要解释下面怎么做。例如,/*ADD AMOUNT TO TOTAL*/TOTAL=AMOUN
20、TTOTAL不好。,如果注明把月销售额计入年度总额,便使读者理解了下面语句的意图:/*ADD MONTHLY-SALES TO ANNUAL-TOTAL*/TOTAL=AMOUNTTOTAL要点 描述一段程序,而不是每一个语句;用缩进和空行,使程序与注释容易区别;注释要正确。,3.视觉组织 空格、空行和移行,恰当地利用空格,可以突出运算的优先性,避免发生运算的错误。例如,将表达式(A17)ANDNOT(B49)ORC写成(A17)AND NOT(B49)OR C自然的程序段之间可用空行隔开;,移行也叫做向右缩格。它是指程序中的各行不必都在左端对齐,都从第一格起排列。这样做使程序完全分不清层次关
21、系。对于选择语句和循环语句,把其中的程序段语句向右做阶梯式移行。使程序的逻辑结构更加清晰。例如,两重选择结构嵌套,写成下面的移行形式,层次就清楚得多。,IF()THEN IF()THEN ELSE ENDIF ELSE ENDIF,二、数据说明,在设计阶段已经确定了数据结构的组织及其复杂性。在编写程序时,则需要注意数据说明的风格。为了使程序中数据说明更易于理解和维护,必须注意以下几点。1.数据说明的次序应当规范化 2.说明语句中变量安排有序化 3.使用注释说明复杂数据结构,数据说明的次序应当规范化,数据说明次序规范化,使数据属性容易查找,也有利于测试,排错和维护。原则上,数据说明的次序与语法无
22、关,其次序是任意的。但出于阅读、理解和维护的需要,最好使其规范化,使说明的先后次序固定。,例如,在FORTRAN程序中数据说明次序 常量说明 简单变量类型说明 数组说明 公用数据块说明 所有的文件说明在类型说明中还可进一步要求。例如,可按如下顺序排列:整型量说明 实型量说明 字符量说明 逻辑量说明,说明语句中变量安排有序化,当多个变量名在一个说明语句中说明时,应当对这些变量按字母的顺序排列。带标号的全程数据(如FORTRAN的公用块)也应当按字母的顺序排列。例如,把 integer size,length,width,cost,price写成 integer cost,length,price
23、,size,width,使用注释说明复杂数据结构,如果设计了一个复杂的数据结构,应当使用注释来说明在程序实现时这个数据结构的固有特点。例如,对PL/1的链表结构和Pascal中用户自定义的数据类型,都应当在注释中做必要的补充说明。,三、语句结构,在设计阶段确定了软件的逻辑流结构,但构造单个语句则是编码阶段的任务。语句构造力求简单,直接,不能为了片面追求效率而使语句复杂化。,1.在一行内只写一条语句,在一行内只写一条语句,并且采取适当的移行格式,使程序的逻辑和功能变得更加明确。许多程序设计语言允许在一行内写多个语句。但这种方式会使程序可读性变差。因而不可取。,例如,有一段排序程序FOR I:=1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 课本 讲解 章程 编码
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6610934.html