《软件工程导论编码幻灯片.ppt》由会员分享,可在线阅读,更多相关《软件工程导论编码幻灯片.ppt(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、软件工程导论课件编码第1页,共24页,编辑于2022年,星期三2 编码编码 编码就是把软件设计结果翻译成用某种程序设计语编码就是把软件设计结果翻译成用某种程序设计语言书写的程序。言书写的程序。1 1、选择程序设计语言选择程序设计语言 程序设计语言是人和计算机通信的最基本的工具,程序设计语言是人和计算机通信的最基本的工具,它的特点必然会影响人的思维和解题方式,会影响人和它的特点必然会影响人的思维和解题方式,会影响人和计算机通信的方式和质量,也会影响其他人阅读和理解计算机通信的方式和质量,也会影响其他人阅读和理解程序的难易程度。因此,编码之前的一项重要工作就是程序的难易程度。因此,编码之前的一项重
2、要工作就是选择一种适当的程序设计语言。选择一种适当的程序设计语言。第2页,共24页,编辑于2022年,星期三3选择程序设计语言的主要实用标准:选择程序设计语言的主要实用标准:(1)(1)系统用户的要求。系统用户的要求。(2)(2)可以使用的编译程序。可以使用的编译程序。(3)(3)可以得到的软件工具。可以得到的软件工具。(4)(4)工程规模。工程规模。(5)(5)程序员的知识。程序员的知识。(6)(6)软件可移植性要求。软件可移植性要求。(7)(7)软件的应用领域。软件的应用领域。第3页,共24页,编辑于2022年,星期三42 2 程序设计风格程序设计风格程序实际上也是一种供人阅读的文章,程序
3、实际上也是一种供人阅读的文章,有一个有一个文章的风格文章的风格问题。应该使程序问题。应该使程序具有良好的风格。具有良好的风格。源程序文档化源程序文档化 数据说明数据说明 语句结构语句结构 输入输出方法输入输出方法第4页,共24页,编辑于2022年,星期三5(1 1)源程序文档化源程序文档化 标识符的命名标识符的命名 安排注释安排注释 程序的视觉组织程序的视觉组织第5页,共24页,编辑于2022年,星期三6 符号名的命名符号名的命名符号名即标识符,包括符号名即标识符,包括模块名、变量名、常量名、标号模块名、变量名、常量名、标号名、子程序名、名、子程序名、数据区名、数据区名以及以及缓冲区名缓冲区名
4、等。等。这些名字应能反映它所代表的实际东西,这些名字应能反映它所代表的实际东西,应有一定实际应有一定实际意义。意义。例如,表示次数的量用例如,表示次数的量用TimesTimes,表示总量的用,表示总量的用TotalTotal,表示平均值的用,表示平均值的用AverageAverage,表示和的量用,表示和的量用SumSum等。等。名字不是越长越好名字不是越长越好,应当选择精炼的意义明确的名字。,应当选择精炼的意义明确的名字。必必要时可使用缩写名字要时可使用缩写名字,但这时要注意缩写规则要一致,并,但这时要注意缩写规则要一致,并且要且要给每一个名字加注释给每一个名字加注释。同时,在一个程序中,一
5、个变。同时,在一个程序中,一个变量只应用于一种用途。量只应用于一种用途。第6页,共24页,编辑于2022年,星期三7 程序的注释程序的注释 夹在程序中的注释是程序员与夹在程序中的注释是程序员与日后日后的程序读的程序读者之间者之间通信的重要手段通信的重要手段。注释注释决不是可有可无决不是可有可无的。的。一些正规的程序文本中,注释行的数量占一些正规的程序文本中,注释行的数量占到整个源程序的到整个源程序的1/31/3到到1/21/2,甚至更多。,甚至更多。注释分为注释分为序言性注释序言性注释和和功能性注释功能性注释。第7页,共24页,编辑于2022年,星期三8序言性注释序言性注释通常置于每个程序模块
6、的开头部分,通常置于每个程序模块的开头部分,它应当给出程序的整体说明它应当给出程序的整体说明,对于理解程序本身具有引导作用。对于理解程序本身具有引导作用。序言性注释包括:序言性注释包括:程序标题程序标题;有关本模块有关本模块功能和目的功能和目的的的说明说明;主要算法主要算法;接口说明接口说明:包括调用形式,参数描述,子程序清单;:包括调用形式,参数描述,子程序清单;有关数据描述有关数据描述:重要的变量及其用途,约束或限制条件,:重要的变量及其用途,约束或限制条件,以及其它有关信息;以及其它有关信息;模块位置模块位置:在哪一个源文件中,或隶属于哪一个软件包;:在哪一个源文件中,或隶属于哪一个软件
7、包;开发简历开发简历:模块设计者,复审者,复审日期,修改日期及:模块设计者,复审者,复审日期,修改日期及有关说明等。有关说明等。第8页,共24页,编辑于2022年,星期三9功能性注释功能性注释功能性注释嵌在源程序体中,用以描述其后的语句或程序段功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎么样,而不要是在做什么工作,或是执行了下面的语句会怎么样,而不要解释下面怎么做。解释下面怎么做。例如,例如,/*ADD AMOUNT TO TOTAL*/*ADD AMOUNT TO TOTAL*/TOTAL=AMOUNT TOTAL=AMOUNTTOTALTOT
8、AL 上面注视不清楚,如果注明把月销售额计入年度总额,便上面注视不清楚,如果注明把月销售额计入年度总额,便使读者理解了下面语句的意图:使读者理解了下面语句的意图:/*ADD MONTHLY-SALES TO ANNUAL-TOTAL*/*ADD MONTHLY-SALES TO ANNUAL-TOTAL*/TOTAL=AMOUNT TOTAL=AMOUNTTOTALTOTAL要点要点 描述一段程序,而不是每一个语句;描述一段程序,而不是每一个语句;用缩进和空行,使程序与注释容易区别;用缩进和空行,使程序与注释容易区别;注释要正确。注释要正确。第9页,共24页,编辑于2022年,星期三10 视觉
9、组织视觉组织 空格、空行和移行空格、空行和移行恰当地利用恰当地利用空格空格,可以,可以突出运算的优先突出运算的优先性性,避免发生运算的错误。例如,避免发生运算的错误。例如 ,将,将表达式表达式 (A A17)17)ANDNOTANDNOT(B B49)49)ORCORC写成写成 (A A17)17)AND NOTAND NOT(B B49)49)OR COR C自然的程序段之间可用自然的程序段之间可用空行空行隔开;隔开;移行移行也叫做也叫做向右缩格向右缩格。它是指程序中的。它是指程序中的各行不必都在左端对齐,都从第一格各行不必都在左端对齐,都从第一格起排列。这样做使程序完全分不清层起排列。这样
10、做使程序完全分不清层次关系。次关系。对于对于选择语句选择语句和和循环语句循环语句,把其中的程,把其中的程序段语句向右做序段语句向右做阶梯式移行阶梯式移行。使程序的。使程序的逻辑结构更加清晰。逻辑结构更加清晰。例如,两重选择结例如,两重选择结例如,两重选择结例如,两重选择结构嵌套,写成下面构嵌套,写成下面构嵌套,写成下面构嵌套,写成下面的移行形式,层次的移行形式,层次的移行形式,层次的移行形式,层次就清楚得多。就清楚得多。就清楚得多。就清楚得多。IFIF()THENTHEN IF IF()THENTHEN ELSE ELSE ENDIF ENDIF ELSE ELSE ENDIF ENDIF第1
11、0页,共24页,编辑于2022年,星期三11(2)(2)数据说明数据说明在设计阶段已经确定了数据结构的组织及其复杂性。在在设计阶段已经确定了数据结构的组织及其复杂性。在编写程序时,则编写程序时,则需要注意数据说明的风格需要注意数据说明的风格。为了使程序中数据说明更易于理解和维护,必须注意以下几点为了使程序中数据说明更易于理解和维护,必须注意以下几点:a.数据说明的次序应该标准化。数据说明的次序应该标准化。有次序易查阅,能加速测试、调有次序易查阅,能加速测试、调试和维护的过程。试和维护的过程。例如:数据说明例如:数据说明 数据类型说明数据类型说明 常量说明常量说明 简单变量类型说明简单变量类型说
12、明 数组说明数组说明 公用数据块说明公用数据块说明 所有的文件说明所有的文件说明 整型量说明整型量说明 实型量说明实型量说明 字符量说明字符量说明 逻辑量说明逻辑量说明第11页,共24页,编辑于2022年,星期三12 b.b.当当多个变量名多个变量名在一个语句中说明时,在一个语句中说明时,应该按字母顺序应该按字母顺序排列排列这些变量。这些变量。例如,把例如,把 integer size,length,width,cost,price 写成写成 integerinteger costcost,lengthlength,price price,size size,widthwidth c.c.如果
13、设计时使用了一个如果设计时使用了一个复杂的数据结构复杂的数据结构,则,则应该用注应该用注解说明解说明用程序设计语言实现这个数据结构的方法和特点。用程序设计语言实现这个数据结构的方法和特点。第12页,共24页,编辑于2022年,星期三13(3 3)语句构造)语句构造 构造语句时应该遵循的构造语句时应该遵循的原则原则是,每个是,每个语句都应该语句都应该简单而直接简单而直接,不能为了提高效率,不能为了提高效率而使程序变得过分复杂;也而使程序变得过分复杂;也不要刻意追求不要刻意追求技巧性,使程序编写得过于紧凑。技巧性,使程序编写得过于紧凑。例如:例如:例如:例如:AI=AIAI=AIATAT;AT=A
14、IAT=AIATAT;AI=AIAI=AIATAT;WORK=ATWORK=AT;AT=AIAT=AI;AI=WORKAI=WORK;第13页,共24页,编辑于2022年,星期三例如:例如:例如:例如:int iint i,j;j;for(for(i i=1;=1;i i=n n;i i+)+)for(for(j j=1;=1;j j=n n;j+)+)V V i i j j (i ij)*(j ji)n n for(for(for(for(i i i i1;1;i i=n n n n;i i i i+)+)for(for(j j j j1;1;j j j j=0&char=9)不要让读者绕弯
15、子想。不要让读者绕弯子想。避免大量使用循环嵌套和条件嵌套;避免大量使用循环嵌套和条件嵌套;利用括号使逻辑表达式或算术表达式的运算次序清晰直利用括号使逻辑表达式或算术表达式的运算次序清晰直观。观。第15页,共24页,编辑于2022年,星期三16(4 4)输入输出)输入输出 在设计和编写程序时应该考虑下述有关输入输出风格的规则:对所有的输入数据都要进行检验,识别错误的输入,以保证每个数据的有效性;检查输入项的各种重要组合的合法性,必要时报告输入状态信息;使得输入的步骤和操作尽可能简单,并保持简单的输入格式;输入数据时,应允许使用自由格式输入;应允许缺省值;第16页,共24页,编辑于2022年,星期
16、三17 输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目;在交互式输入输入时,要在屏幕上使用提示符明确提示交互输入的请求,指明可使用选择项的种类和取值范围。同时,在数据输入的过程中和输入结束时,也要在屏幕上给出状态信息;当程序设计语言对输入输出格式有严格要求时,应保持输入格式与输入语句的要求的一致性;给所有的输出加注解,并设计输出报表格式。输入输出风格还受到许多其它因素的影响。如输入输出设备(例如终端的类型,图形设备,数字化转换设备等)、用户的熟练程度、以及通信环境等。第17页,共24页,编辑于2022年,星期三18(5 5)程序效率)程序效率 程序的效率是指程序的效率是指程
17、序的执行速度程序的执行速度及及程程序所需占用的内存的存储空间序所需占用的内存的存储空间。程序编码。程序编码是最后提高运行速度和节省存储的机会,是最后提高运行速度和节省存储的机会,因此在此阶段不能不考虑程序的效率。因此在此阶段不能不考虑程序的效率。第18页,共24页,编辑于2022年,星期三19让我们首先明确讨论让我们首先明确讨论程序效率的几条准则程序效率的几条准则 效率是一个性能要求,应当在需求分效率是一个性能要求,应当在需求分析阶段给出。析阶段给出。软件效率以需求为准软件效率以需求为准,不,不应以人力所及为准。应以人力所及为准。好的设计可以提高效率。好的设计可以提高效率。程序的程序的效率与程
18、序的简单性效率与程序的简单性相关,不相关,不要牺牲程序的清晰性和可读性来不必要要牺牲程序的清晰性和可读性来不必要地提高效率。地提高效率。第19页,共24页,编辑于2022年,星期三20效率问题效率问题 (1)(1)程序运行时间程序运行时间 (2)(2)存储器效率存储器效率 (3)(3)输入输出的效率输入输出的效率第20页,共24页,编辑于2022年,星期三21(1)(1)程序运行时间程序运行时间源程序的源程序的效率直接由详细设计阶段确定的算法的效率决定效率直接由详细设计阶段确定的算法的效率决定,但是,写,但是,写程程序的风格序的风格也能对程序的执行速度和存储器要求产生影响。也能对程序的执行速度
19、和存储器要求产生影响。在把在把详细设计结果翻译成程序详细设计结果翻译成程序时,总可以应用下述规则:时,总可以应用下述规则:写程序之前先简化算术的和逻辑的表达式;写程序之前先简化算术的和逻辑的表达式;仔细研究嵌套的循环,以确定是否有语句可以从内层往外移;仔细研究嵌套的循环,以确定是否有语句可以从内层往外移;尽量避免使用多维数组;尽量避免使用多维数组;尽量避免使用指针和复杂的表;尽量避免使用指针和复杂的表;使用执行时间短的算术运算;使用执行时间短的算术运算;不要混合使用不同的数据类型;不要混合使用不同的数据类型;尽量使用整数运算和布尔表达式。尽量使用整数运算和布尔表达式。在效率是决定性因素的应用领
20、域,尽量使用有良好优化特性的编在效率是决定性因素的应用领域,尽量使用有良好优化特性的编译程序,以自动生成高效目标代码。译程序,以自动生成高效目标代码。第21页,共24页,编辑于2022年,星期三22(2)(2)存储器效率存储器效率在大中型计算机系统中,存储限制不再是主要问题。在这种环境下,对内存采取基于操作系统的分页功能的虚拟存储管理。存储效率与操作系统的分页功能直接有关。采用结构化程序设计,将程序功能合理分块,使每个模块或一组密切相关模块的程序体积大小与每页的容量相匹配,可减少页面调度,减少内外存交换,提高存储效率。在微型计算机系统中,存储器的容量对软件设计和编码的制约很大。因此要选择可生成
21、较短目标代码且存储压缩性能优良的编译程序,有时需采用汇编程序。提高存储器效率的关键是程序的简单性。第22页,共24页,编辑于2022年,星期三23(3)(3)输入输出的效率输入输出的效率输入输出可分为两种类型:面向人(操作员)的输入输出 面向设备的输入输出如果操作员能够十分方便、简单地录入输入数据,或者能够十分直观、一目了然地了解输出信息,则可以说面向人的输入输出是高效的。第23页,共24页,编辑于2022年,星期三24关于提高设备输入/输出效率的指导原则:输入/输出的请求应当最小化;对于所有的输入/输出操作,安排适当的缓冲区,以减少频繁的信息交换。对辅助存储(例如磁盘),选择尽可能简单的,可接受的存取方法;对辅助存储的输入/输出,应当成块传送;对终端或打印机的输入/输出,应考虑设备特性,尽可能改善输入/输出的质量和速度;任何不易理解的,对改善输入/输出效果关系不大的措施都是不可取的;任何不易理解的所谓“超高效”的输入/输出是毫无价值的;第24页,共24页,编辑于2022年,星期三
限制150内