SE11程序设计语言及编码_第1页
SE11程序设计语言及编码_第2页
SE11程序设计语言及编码_第3页
SE11程序设计语言及编码_第4页
SE11程序设计语言及编码_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第十一章 编码和语言选择,软件工程,引言,软件工程编码阶段的任务是将详细设计翻译成计算机可以“理解”并且最终可运行的代码。 根据基本机制可将程序设计语言分为过程式程序设计语言、函数式程序设计语言、逻辑程序设计语言和面向对象程序设计语言四类。 编码阶段不应单纯追求编码效率,而应全面考虑编写程序、测试程序、说明程序和修改程序等各项工作。 影响编码质量的因素包括编程语言、编程准则和编程风格,它们对程序的可靠性、可读性、可测试性和可维护性都将产生深远的影响。,通常把编码和测试统称为实现。 编码(Coding):把软件设计翻译成计算机可以理解的形式用某种程序设计语言书写的程序 编码阶段涉及的问题 语言选

2、择 编码风格 编程准则 程序效率,引言,目的 用选定的程序设计语言将模块的过程性描述翻译为用该语言书写的源程序 编码 模块的过程性描述 源程序 (不可执行的) (可执行的),编码概述,编码的过程 熟悉所选语言的功能和程序开发环境 仔细阅读设计文档详细设计 弄清要编码的模块的外部接口与内部过程 对编码产生的源程序的要求 正确可靠 简明清晰 有较高的执行效率,编码概述,效率与清晰是一对矛盾的要求 要优先考虑程序的清晰性和可理解性,对编码的有关说明,编码 要求,清晰第一 (对大多数模块),效率第一 (对个别模块),用单入/单出保证控制流的直线性 用限制GOTO保证控制流的局部性,用GOTO与其它技巧

3、消除重复编码,编码概述,设计是编码的先导,要复审设计 编码要熟悉所用的语言 要恰倒好处利用编程语言的特点 测试阶段也要编写一些测试程序,对编码的有关说明,编码概述,编程标准,人们总是希望编制清晰、紧凑、高效的程序,但这些特性在编码时往往互相矛盾,一般应依次考虑下列原则: (1)编制易于修改、维护的代码 主要措施是在模块化和面向对象详细设计的基础上,进一步按属性划分程序。 (2)编制易于测试的代码 一般来说,人们总是通过运用条件编译语句尽早设计出测试用例、采用统一的命名规则管理这些测试用例并适时地进行回归测试等一系列措施提高程序的可测试性。,编程标准(续),(3)必须将编程与编文档的工作统一开来

4、。一个程序段的文档应包括下列内容: 代码的功能; 代码的完成者; 代码在整个软件系统中的位置; 代码编制、复审的时间; 保留代码的原因; 代码中如何使用数据结构和算法。 (4)编程中采用统一的标准和约定,降低程序复杂性 (5)限定每一层的副作用,减少耦合度 (6)尽可能地重用,编码的风格,追求“聪明”和“技巧”提倡“简明”和“直接” 使用标准的控制结构 清晰的前提下求取效率 Make it right before you make it faster. Make it clear before you make it faster. Keep it right when you make i

5、t faster. (求快不忘保持程序正确) Keep it simple to make it faster. (保持程序简单以求快) Dont sacrifice clarity for “efficiency”. (书写清楚,不要为“效率”牺牲清楚),源程序代码的逻辑简明清晰、易读易懂是好程序的一个重要标准 程序具有良好的风格包括: 源程序文档化 数据说明 语句结构 输入/输出方法 同时要考虑设计出的程序的执行效率问题,编码的风格,(1)符号名的命名 符号名即标识符,包括模块名、变量名、常量名、标号名、子程序名、数据区名以及缓冲区名等。 这些名字应能反映它所代表的实际东西,应有一定实际意

6、义。 例如,表示次数的量用Times,表示总量的用Total,表示平均值的用Average,表示和的量用Sum等。 应当选择精炼的意义明确的名字。必要时可使用缩写名字,但这时要注意缩写规则要一致,并且要给每一个名字加注释。,1、源程序文档化,编码的风格,(2)程序的注释 夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段。 注释决不是可有可无的。 一些正规的程序文本中,注释行的数量占到整个源程序的13到12,甚至更多。 注释分为序言性注释和功能性注释。,编码的风格,通常置于每个程序模块的开头部分,它应当给出程序的整体说明。有关项目包括: 程序标题; 有关本模块功能和目的的说明; 主要算

7、法; 接口说明:包括调用形式,参数描述,子程序清单; 有关数据描述:重要的变量及其用途,约束或限制条件,以及其它有关信息; 模块位置:在哪一个源文件中,或隶属于哪一个软件包; 开发简历:模块设计者,复审者,复审日期,修改日期及有关说明等。,1)序言性注释,编码的风格,嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎么样。而不要解释下面怎么做。 要点: 描述一段程序,而不是每一个语句; 用缩进、空行或加框,使程序与注释容易区别; 注释要正确。,2)功能性注释,编码的风格,例如, /*ADD AMOUNT TO TOTAL*/ TOTAL=AMOUNTTOTAL

8、此注释不好。 如果注明把月销售额计入年度总额,便使读者理解了下面语句的意图: /*ADD MONTHLY-SALES TO ANNUAL-TOTAL*/ TOTAL=AMOUNTTOTAL,编码的风格,(3)视觉组织(空格、空行和移行) 恰当地利用空格,可以突出运算的优先性,避免发生运算的错误。 自然的程序段之间可用空行隔开。 移行也叫做向右缩格。 对于选择语句和循环语句,把其中的程序段语句向右做阶梯式移行。使程序的逻辑结构更加清晰。,编码的风格,例如,两重选择结构嵌套,写成下面的移行形式,层次就清楚得多。 for(i=1;i=n;i+) for(j=1;j=n;j+) aiji*10+j;,

9、编码的风格,在设计阶段已经确定了数据结构的组织及其复杂性。在编写程序时,则需要注意数据说明的风格。 为了使程序中数据说明更易于理解和维护,必须注意以下几点: 数据说明的次序应当规范化 说明语句中变量安排有序化 使用注释说明复杂数据结构,2、数据说明,编码的风格,(1)数据说明的次序应当规范化 数据说明次序规范化,使数据属性容易查找,也有利于测试,排错和维护。 原则上,数据说明的次序与语法无关,其次序是任意的。但出于阅读、理解和维护的需要,最好使其规范化,使说明的先后次序固定。,编码的风格,(2)说明语句中变量安排有序化 例如,在FORTRAN程序中数据说明次序 常量说明 简单变量类型说明 数组

10、说明 公用数据块说明 所有的文件说明 在类型说明中还可进一步要求。例如,可按如下顺序排列: 整型量说明 实型量说明 字符量说明 逻辑量说明,编码的风格,当多个变量名在一个说明语句中说明时,应当对这些变量按字母的顺序排列。带标号的全程数据(如FORTRAN的公用块)也应当按字母的顺序排列。 例如,把 integer size,length,width,cost,price 写成: integer cost,length,price,size,width,编码的风格,(3)使用注释说明复杂数据结构 如果设计了一个复杂的数据结构,应当使用注释来说明在程序实现时这个数据结构的固有特点。 例如,对链表结

11、构和用户自定义的数据类型,都应当在注释中做必要的补充说明。,编码的风格,在设计阶段确定了软件的逻辑流结构,但构造单个语句则是编码阶段的任务。语句构造力求简单、直接,不能为了片面追求效率而使语句复杂化。 (1)在一行内只写一条语句 在一行内只写一条语句,并且采取适当的移行格式,使程序的逻辑和功能变得更加明确。,3、语句结构,编码的风格,(2)程序编写首先应当考虑清晰性 程序编写首先应当考虑清晰性,不要刻意追求技巧性,使程序编写得过于紧凑。 例如,有一个用C语句写出的程序段: AI=AIAT; AT=AIAT; AI=AIAT; 此段程序可能不易看懂,有时还需用实际数据试验一下。,编码的风格,实际

12、上,这段程序的功能就是交换AI和AT中的内容。目的是为了节省一个工作单元。如果改一下: WORK=AT; AT=AI; AI=WORK; 就能让读者一目了然了。,编码的风格,(3)程序要能直截了当地说明程序员的用意。 程序编写得要简单,写清楚,直截了当地说明程序员的用意。例如, for(i=1;i=n;i+) for(j=1;j=n;j+) vij(ij) * (ji),编码的风格,除法运算()在除数和被除数都是整型量时,其结果只取整数部分,而得到整型量。 当ij时,i/j=0 当ji时,j/i=0 得到的数组 当ij时,vij=(ij)*(ji)=0 当ij时,vij=(ij)*(ji)=1

13、 这样得到的结果,v是一个单位矩阵。,编码的风格,写成以下的形式,就能让读者直接了解程序编写者的意图。 for(i1;i=n;i+) for(j1;j=n;j+) if(i=j) vij1.0; else vij0.0;,编码的风格,(4)除非对效率有特殊的要求,程序编写要做到清晰第一,效率第二。 (5)首先要保证程序正确,然后才要求提高速度。 (6)避免使用临时变量而使可读性下降。,例如,有的程序员为了追求效率,往往喜欢把表达式 AI1AI; 写成 AIAI; XAI1AI; 这样将一句分成两句写,会产生意想不到的问题,编码的风格,(7)让编译程序做简单的优化。 (8)尽可能使用库函数 (9

14、)避免不必要的转移。同时如果能保持程序可读性,则不必用GOTO语句。,编码的风格,IF(XY) GOTO 30 IF(YZ) GOTO 50 SMALLZ GOTO 70 30 IF(XZ) GOTO 60 SMALLZ GOTO 70 50 SMALLY GOTO 70 60 SMALLX 70 CONTINUE,例如,有一个求三个数中最小值的程序:,编码的风格,程序只需编写成: smallx; if ( y small ) smally; if ( z =a) if(char=z) cout“This is a letter。”; else cout= 0 Ai, j:=0; 行主序:50

15、次缺页;列主序,5000次缺页,编码的风格,在微型计算机/嵌入式系统中,存储器的容量对软件设计和编码的制约很大。因此要选择可生成较短目标代码且存储压缩性能优良的编译程序,有时需采用汇编程序。 提高存储器效率的关键是程序的简单性。,编码的风格,(4)影响输入输出的因素 输入输出可分为两种类型: 面向人(操作员)的输入输出 面向设备的输入输出 1)如果操作员能够十分方便、简单地录入输入数据,或者能够十分直观、一目了然地了解输出信息,则可以说面向人的输入输出是高效的。,编码的风格,2)关于面向设备的输入/输出,可以提出一些提高输入/输出效率的指导原则,输入/输出的请求应当最小化; 对于所有的输入/输

16、出操作,安排适当的缓冲区,以减少频繁的信息交换。 对辅助存储(例如磁盘),选择尽可能简单的,可接受的存取方法;,编码的风格,对辅助存储的输入/输出,应当成块传送; 对终端或打印机的输入/输出,应考虑设备特性,尽可能改善输入/输出的质量和速度; 任何不易理解的,对改善输入/输出效果关系不大的措施都是不可取的; 任何不易理解的所谓“超高效”的输入/输出是毫无价值的。,编码的风格,编码语言,程序设计语言的发展,FORTRAN COBOL BASIC,PASCAL C Ada,C+ Java ,SQL 报表生成 ,适用各类应用领域的语言,编码语言,可从如下方面比较程序设计语言: (1)软件心理学观点:

17、影响程序员心理的语言特性 (2)软件工程的观点:对于程序编码的工程上的要求 详细设计能够容易的翻译成代码 源程序可移植性 编译程序高效率 尽可能利用代码自动生成工具 可维护性 (3)程序设计语言的技术性能:模块化、数据结构能力,编码语言,选择语言的重要的考虑因素 (1)应用领域; (2)算法和计算复杂性; (3)软件运行环境; (4)用户需求中关于性能方面的需要(可移植性、可靠性、系统响应时间等); (5)数据结构的复杂性; (6)软件开发人员的知识水平; (7)可用的编译器与交叉编译器。,编码语言,选择高级程序设计语言 高级语言明显优于汇编语言,因此,除了在很特殊的应用领域(例如,对程度执行

18、时间和使用的空间都有很严格限制的情况;需要产生任意的甚至非法的指令序列;体系结构特殊的微处理机,以致在这类机器上通常不能实现高级语言编译程序),或者大型系统中执行时间非常关键的(或直接依赖于硬件的)一小部分代码需要用汇编语言书写之外,其他程序应该一律用高级语言书写。,编码语言,为了使程序容易测试和维护以减少生命周期的总成本,选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构;为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程序中的错误;为了降低软件开发和维护的成本,选用的语言应该有良好的独立编译机制。,选择高级语言的要求,编码语言,程序设计支持环境(PSE),现今编程过程大多在一组CASE工具的支持下进行,这组工具辅助完成编辑、编译、调试、项目管理等一系列任务,人们称这组工具构成一个程序设计支持环境(PSE),一个富有吸引力的PSE应具备下列特性: 通用性适用于不同的语言、不同的应用领域和开发方法; 适应性能通

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论