1、程序设计语言和编码,5,第 五 章,软件的详细设计,完成了软件的过程性的描述,接下来进入程序编码阶段。编码(Coding)阶段的任务,是为每个模块编写程序。即是将详细设计的结果转换为源程序代码。本章从如何提高软件的质量和可维护性的角度,讨论在编码阶段所要解决的主要问题: 程序设计语言的特性及选择的原则 程序设计风格 软件代码审查,按照语言级别可以分为两大类: 低级语言 包括机器语言和汇编语言。 低级语言表示成二进制形式的机器基本指令集,或者是操作码经过符号化的基本指令集,由于其依赖于特定的机器,其使用复杂、繁琐、费时、易出差错,因而程序编写也有一定的难度。 高级语言 高级语言的表示方法要比低级
2、语言更接近于待解的问题,其特点是在一定程度上与具体机器无关,易学、易用、易维护。高级语言的实现极大的提高了软件的生产效率。,5.1 程序设计语言的选择,一、程序设计语言的分类,1. 按应用范围分: 通用语言有:PASCAL、C、C+、Java等 专用语言有:APT等,三、高级语言的分类,2. 按用户的要求分为: 过程式语言和非过程式语言;3. 按使用方式分: 交互式语言和非交互式语言;4.按语言的内在特点分: 系统实现语言 静态高级语言 高级语言 块结构高级语言;,5.1 程序设计语言的选择,选择程序设计语言的一般准则:1. 项目的应用领域。应尽量选取适合某个应用领域的语言。2. 算法和计算复
3、杂性。 3. 软件的执行环境。要选取机器上能运行且具有相应支持软件的语言。4. 性能因素。应结合工程具体性能来考虑。 5. 数据结构的复杂性。要根据不同语言构造数据结构类型的能力选取 。6. 软件开发人员的知识水平以及心理因素。要特别注意选择语言时,尽量避免受外界的影响,盲目追求高、新的语言。,四、程序设计语言选择准则,五、高级语言的内在特性,1. 传统的高级语言 具有代表性有:BASI、FORTRAN、ALOGOL 2.通用的结构化程序设计语言 具有代表性的有: PASCAL、PL/1、C、Ada 等它们都是从 ALOGOL 语言派生出来的。 PL/1是第一个真正广泛适用于多种不同的应用领域
4、的语言,故又称大型公共汽车语言。支持多任务处理和复杂的I/O功能,表处理等。 Ada语言一种用于嵌入式实时计算机设计的标准语言。提供了一组丰富的实时特性,包括多任务处理,中断处理任务间的同步通信等。提供了Ada程序包及辅助软件开发的环境。,3. 面向对象的程序设计语言(Object-Oriented) 其中具有代表性的有: Smalltalk语言,最先实现真正的面向对象的程序设计语言,支持程序部件的“可复用性”。 C+程序设计语言,既融合了面向对象的能力,又与C兼容,保留了C的许多重要特性。维护了大量已开发的C库、工具及C源程序的完整性。具有代表性的编程环境有: Borland C+;Micr
5、osoft Visual C+等。 Java语言,是一种简单的面向对象的分布式的语言。功能强大、高效安全,与结构无关,易于移植,是多线程的动态语言。增加了Objective C的扩充,提供更多的动态解决办法 。具有网络支持、简单、安全。,C#语言。具有Java的几乎所有特征,同时又增加了泛型(generics)、委托(delegation)代码、 表达式等现代高级语言的特性,使其表达能力非常强。 面向对象的可视化语言,即所见即所得,提供了一个可视化的开发环境,具有图形设计工具,结构化的事件驱动编程模式。具有代表性的有:Microsoft Visual Basic、Borland Delphi等
6、。 4.第四代语言(4GL) 称为4GL (The Forth Generation Language)。其特点是:不需要规定算法细节,在更高层次上用不同文法来表示程序结构和数据结构。常见的有:查询语言、程序生成器和其它4GL语言,如:判断支持语言、原型语言、形式化规格说明语言等。,结构程序设计的概念最早是由E.W.Dijkstra提出来的, 结构化程序设计方法 (Structured Program),即SP法是结构化开发方法的重要组成部分。 其基本思想是自顶向下、逐步求精。它的基本原则是功能的分解与抽象。,5.2 结构化程序设计,一、结构化程序设计特点 1.自顶而下、逐步求精 这种逐步求精
7、的思想符合人类解决复杂问题的普遍规律,从而可以显著提高软件开发的效率。 体现了先全局,后局部、先抽象后具体的方法,使开发的程序层次结构清晰,易读、易理解还易验证,因而提高了程序的质量。 2.单入口和单出口的控制结构 结构化的程序是由且仅由顺序、选择、循环三种基本控制结构组成,既保证了程序结构清晰,又提高了程序代码的可重用性。,二、结构化程序设计的步骤,三、优化设计 优化设计有多方面的内容,例如结构的优化,功能的优化,算法的优化和时间、效率的优化等等.,介绍对时间起决定性作用的软件的优化方法: 不考虑时间因素的前提下开发并精简软件结构。寻求软件设计结构中的 “关键路径” 和 “关键事件”。仔细的
8、设计该模块的实现算法。选择合适的高级编程语言,提高程序的编译效率。在效率和实现功能之间寻求平衡点。所谓的平衡点指的是,不要求为了一些不必要的功能而耗费大量的时间,从而降低效率,以致得不偿失。,5.3 程序设计风格,1. 代码文件 符号名的命名。尽量用与实际意义相同或接近的标识符命名。 源程序中的注释 注释可分为序言性注释和解释性注释。错误的注释宁可不要。 注意源程序的书写格式,讨论程序设计风格,是力图从编码原则的角度来探讨提高程序的可读性、改善程序质量的方法和途径。,2.语句构造方法 语句构造,尤其是流程控制语句的构造技术,直接影响到程序的可读性及效率。应采用直接、清晰的构造方式,而不要为了提
9、高效率或者显示技巧而降低程序的清晰性和可读性。,例1 若有以下C程序段,其功能是要建立一个NN的单位矩阵V:for (i = 0; i N; i+) for (j = 0; j N; j+) Vij = (i / j) * (j / i); 程序构思巧妙,但易读性差.,采用直截了当的描述方式: for (i = 0; i N; i+) for (j = 0; j N; j+) Vij = (i = j) ? 1 : 0;,3. 数据说明方法,为使程序中的数据说明更易于理解和维护,数据说明的次序应当规范化: 可按说明类型(常量,简单变量类型,复杂类型 ) 一个语句说明多个变量时,按字母顺序排列。
10、 复杂的数据结构,要加注释。4. 输入输出技术 输入和输出格式应尽可能统一。 输出信息中应该反映输入的数据。 输入和输出应尽可能集中安排。,5.4 算法与程序效率,设计逻辑结构清晰、高效的算法,是提高程序效率的关键。 例如:用C代码编写了两种绘制直线的算法。 在DDA算法中,一共要进行4*dx次浮点加法和2*dx次整型到浮点型的类型转换运算; 在Bresenham算法中,没有浮点运算,共要进行dx次整数比较运算和最多3*dx次整数加法运算。 显然,Bresenham算法在各方面都比DDA算法优越。,1. 算法对效率的影响如顺序表的查找算法,假设顺序表的长度为N,很明显,顺序查找法的时间复杂度为O(N),而二分法的时间复杂度却只是O(log2N)。后者的效率明显高于前者. 2. 存储效率操作系统的存储管理方式,直接影响到程序的存储效率。3. 输入输出效率提高输入/输出速度,减少出错率。,一、影响程序效率的因素,5.5 软件代码审查,为保证代码开发的质量,在编码完成后,进行代码审查或称Review。 审查内容: 1.程序的版式 2.文件结构 3.命名规则 4.表达式与基本语句,