软件编码27.1编码阶段的任务(1)一.编码的目的:使用选定的程序设计语言,把模块的过程性描述翻译为用语言书写的源程序(源代码)。模块的过程性描述(不可执行的)源程序(可执行的)编码37.1编码阶段的任务(2)二.源程序要求正确可靠、简明清晰、效率高。1.源程序的正确性是对程序质量的最基本要求;2.源程序的简明清晰,才便于验证源代码和模块规格说明的一致性,容易进行测试和维护;3.源程序的清晰与效率之间常存在矛盾,要求清晰性好的程序一般效率较低,而要求效率高的程序一般清晰性较差。对于大多数模块,编码时应该把简明清晰放在第一位。4.除了编码阶段产生源代码外,在测试阶段也需要编写一些测试程序,用于对软件的测试。47.2程序设计语言的发展(1)一.程序设计语言的发展按软件工程的观点,语言的发展大致可分为四代、三个阶段。如图:面向机器的语言高级语言(第三代)甚高级语言机器语言(第一代)现代语言汇编语言(第二代)基础语言专用语言第四代语言57.2程序设计语言的发展(2)二.面向机器的语言包括第一代机器语言和第二代汇编语言。这两种语言都依赖于计算机结构,其指令系统随机器而异。为它所支持的计算机独有。该语言编程效率低、容易出错,且维护困难。67.2程序设计语言的发展(3)三.高级语言:不依赖于实现它的计算机,它使用的概念和符号接近于自然的语言。按其特点分为三类:1.基础语言:如BASIC、FORTRAN、COBOL等。该类语言历史久、流传广,且有用它们开发的大量软件,它们的版本不断进行改进,现今仍被广泛的使用。77.2程序设计语言的发展(3)语言主要应用及优点不足之处BASIC用于一般数值计算与事务处理。简单易懂、具有交互性,是初学者学习程序设计语言的入门语言。早期版本不支持结构程序设计,解释执行速度慢,不适用于大的软件开发。FORTRAN主要用于科学计算。新版本在支持结构化控制和字符串处理方面有较大改进。新版本有较大改进。数据类型不丰富,对复杂的数据结构缺乏支持。COBOL商业数据处理。广泛支持与事务数据处理有关的各种过程技术。近似自然语言,易于理解。计算功能弱,编译速度不快。87.2程序设计语言的发展(4)2.现代语言:如PASCAL、C、Ada等;它们都支持结构化的控制结构,具有很强的过程结构和数据结构能力,因此也称为结构化语言(structuredlanguage)。97.2程序设计语言的发展(4)语言主要特征及应用Pascal科学计算、数据处理及系统软件开发。模块清晰、控制结构完备,有丰富的数据类型和数据结构,表达能力强,易于移植。但不支持大型软件的开发和设计,有希望成为微机和小型机上的软件开发语言。C具有结构化语言的公共特征,表达简洁、控制结构与数据结构完备,移植力强、编译质量高。不仅能写出效率高的应用软件,也适用于编写OS、编译程序等系统软件。如UNIX中90%以上的代码是C语言。Ada面向过程的现代语言,适用于一切“嵌入式计算机系统”除具有许多经典语言的特征外,还包含许多新特征。支持并发处理与过程间通信,支持异常处理中实施中断及只能由汇编语言实现的低级操作等。在语言的表达与结构上又具有高级语言特点,远比汇编语言易于开发和维护。它是第一个充分体现软件工程思想的语言,它既是编码语言,又可用作设计表达工具。107.2程序设计语言的发展(5)3.专用语言基础语言与现代语言都属于通用语言。专用语言不同,它是为某一特定的应用专门设计的语言。例如:(1)专用于处理数组和向量的APL语言;(2)数控机床用的APT语言;(3)适用于微处理器开发的FORTH语言;(4)适用于处理符号和表达式的LISP语言等。117.2程序设计语言的发展(5)从软件工程的角度看,这类语言仅支持特殊的应用,把软件需求转换为设计,再从设计转换为实现,较通用语言容易。但它们的可移植性与可维护性都不及通用语言。127.2程序设计语言的发展(6)四.第四代语言1.第三代语言(3GL)与第四代语言(4GL)的区别。语言第三代语言第四代语言特征过程化语言。非过程化语言。面向面向过程,说明“怎么做”。面向应用,说明“做什么”。目的高效的实现各种算法。直接地实现各类应用系统。基础着重算法描述,一次仅处理一个记录或数据元素。以数据或知识为基础,以对集合的处理代替对于单元记录或元素的处理。支持不支持对大量共享数据的处理。支持对大型数据库的高效处理。137.2程序设计语言的发展(7)2.第四代语言(4GL)应具备的特征(1)具有很强的数据管理能力,能对数据库进行有效的存取、查询和其它有关操作;(2)能提供一组高效的、非过程化的命令,组成语言的基本语句。编程时用户只需用这些命令说明“做什么”,不必描述实现的细节;147.2程序设计语言的发展(7)(3)能满足多功能、一体化的要求。为此,语言中除必须含有控制程序逻辑与实现数据库操作的语句外,还应包括生成与处理报表、表格、图形,以及实现数据运算和分析统计功能的各种语句,共同构成一个一体化的语言,以适应多种应用开发的需要。例如,SQL关系数据语言是最早的4GL语言。157.3程序设计语言的特点和选择(1)一.程序设计语言的特点1.名字说明:程序中使用对象的名字,能为编译程序所检查和识别;2.类型说明:定义对象的类型,确定该对象的使用方式;3.初始化:为变量提供适当的初始值或由系统给变量赋一特殊的表明尚未初始化的值;4.程序对象的局部性:程序中真正需要的那部分才能访问的对象;167.3程序设计语言的特点和选择(2)5.程序模块:控制程序对象的名字;6.循环控制结构:如FOR语句、WHILE-DO语句、REPEAT-UNTIL语句等;7.分支控制结构:如IF语句、CASE语句等;8.异常处理:为程序运行过程中发生的错误和意外事件提供检测和处理上的帮助;9.独立编译:能分别编译各个程序单元。177.3程序设计语言的特点和选择(3)二.程序设计语言的选择1.为用户熟悉、便于用户维护的语言。2.运行目标系统的环境中可以提供的编译程序所能选用的语言。3.根据可以得到的软件工具,能在支持程序开发中可以利用的语言。4.根据工程规模的大小、目标系统应用范围选择专用的语言,如实时应用选择Ada语言或汇编语言,系统软件开发选择C语言或第四代语言,软件开发中若含有大量数据操作则选择SQL、dBASE等数据库语言等。187.3程序设计语言的特点和选择(4)5.程序员熟悉的语言。6.标准化程度高、程序可移植性好的语言。7.根据算法与计算的复杂性、数据结构的复杂性。如对于系统程序和结构复杂的应用程序,选择支持数组、记录(或结构)与指针的动态数据结构的Pascal语言或C语言。8.根据实时要求系统需要的响应速度和效率。197.4编码风格(1)一.程序的质量取决于设计的质量,而编译程序的途径在很大程度上又决定着程序的质量。二.编码风格也称程序设计风格,应遵循如下规则:1.程序内部的文档:应包括适当的标识符、适当的注解、程序清单的合理布局与清晰的程序层次结构。207.4编码风格(1)2.数据说明:(1)按照数据结构或数据类型确定的说明次序做到标准化;(2)变量名称尽量有意义,虽然有时字符串长一些,但这样可提高程序的可读性。当多个变量名字在一个语句中说明时,应按字母次序排列;(3)如果设计时使用了复杂的数据结构,应在注解中说明在程序设计语言中实现这个数据结构的方法。217.4编码风格(2)3.使用标准的控制结构(单入口/单出口),确保源程序清晰可读。如前面介绍的选择结构和循环结构等。三种选择结构三种循环结构Ifcthens;CaseIofa:s1;b:s2;……n:sn;End;Fori:=mtondoS;Whilecdos;Ifcthens1elses2;RepeatsUntilc;227.4编码风格(3)4.语句的构造简单明了(1)不要为了节省空间将多个语句写在同一行;(2)尽量避免复杂的条件及“非”条件的测试;(3)避免大量使用循环嵌套和条件嵌套;(4)使用括号使逻辑表达式和算术表达式的运算顺序清晰直观。237.4编码风格(4)5.输入/输出(1)对所有输入数据都要进行校检,防止对程序的有意或无意的破坏;(2)检查输入项重要组合的合法性,剔除模糊的输入值;(3)输入格式力求简单、一致,并尽可能采用自由格式输入;(4)使用数据结束或文件结束标志来终止输入,不要让用户来计算输入的项数或记录数;247.4编码风格(4)(5)向用户明确提示“请输入”的提示信息,同时说明允许的选择范围和边界值;(6)所有输出的报表、报告具有良好的格式;(7)标志所有的输出数据,加以必要的说明;(8)对于具有大量人-机交互的系统,能对用户提供“在线”帮助,对产生重要后果的请求给出醒目的提示,发生错误时能迅速恢复正常。6.效率:程序运行的时间、存储器效率、输入/输出的效率。257.4编码风格(5)三.程序清晰与效率之间的关系1.处理程序正确性、清晰与效率之间的关系时的原则:(1)先求正确后求快;(2)先求清楚后求快;(3)求快不忘保持程序正确;(4)保持程序简单以求快;(5)书写清楚,不为“效率”牺牲清晰。267.4编码风格(6)2.在清晰与效率之间的取舍编码要求用GOTO与其它技巧消除重复编码用限制GOTO保证控制流的局限性用单入/出口保证控制流的直线性效率第一(对个别模块)清晰第一(对大多数模块)27小结1.编码的目的是把详细设计的结果翻译成用选定语言书写的源程序。2.程序的质量主要是由设计的质量决定的。但是,编码的风格和使用的语言,对编码质量也有重要的影响。3.良好的编码风格,应该以结构程序设计原则为指导,使用单入口、单出口的控制结构,有规律地使用GOTO语句。4.提倡源代码文档化。28小结5.程序的输入和输出应充分考虑运行工程学的要求,在满足数据可靠性的前提下,尽量作到对用户友好。6.了解各种语言的主要特点,以便根据问题的需要,合理的选择适当的编码语言。7.编码工具对提高编程的速度和效率是不可缺少的。