第三部分软件设计与建模软件实现PPT讲稿.ppt
第三部分软件设计与建模软件实现第三部分软件设计与建模软件实现第1页,共92页,编辑于2022年,星期二1.1.现代软件工程现代软件工程(国家示范性软件学院系列教材国家示范性软件学院系列教材)张家浩张家浩/东南大学东南大学 机械工业出版社机械工业出版社 2009.12009.12.2.软件工程软件工程 理论与实践理论与实践 许家珆许家珆 曾翎曾翎 彭德中彭德中 编著编著 高等教育出版社高等教育出版社 2004.72004.73.3.软件工程软件工程-实践者的研究方法实践者的研究方法 (美)(美)Roger S.PressmanRoger S.Pressman著著 郑人杰等译郑人杰等译 机械工业出版社机械工业出版社 2008.62008.6 4.4.Software Engineering,6th EditionSoftware Engineering,6th EditionSoftware Engineering,6th EditionSoftware Engineering,6th Edition Sommerville.I.(Sommerville.I.(影印版影印版)机械工业出版社机械工业出版社 2003.42003.4主要参考书:主要参考书:主要参考书:主要参考书:第2页,共92页,编辑于2022年,星期二总总 目目 录录第第1 1章章 软件工程学概述软件工程学概述(2 2学时)学时)第第2 2章章 软件过程软件过程(2 2学时)学时)第第3 3章章 软件过程模型软件过程模型(4 4学时)学时)第第4 4章章 案例研究案例研究(2 2学时)学时)第第5 5章章 软件需求分析过程软件需求分析过程(4 4学时)学时)第第6 6章章 结构化分析建模结构化分析建模(4 4学时)学时)第第7 7章章 面向对象分析面向对象分析(6 6学时)学时)第第8 8章章 软件设计软件设计(4 4学时)学时)第第9 9章章 结构化设计方法结构化设计方法(4 4学时)学时)第3页,共92页,编辑于2022年,星期二总总 目目 录录第第1010章章 面向对象设计面向对象设计(4 4学时)学时)第第1111章章 软件实现软件实现(2 2学时)学时)第第1212章章 软件测试软件测试(4 4学时)学时)第第1313章章 软件维护软件维护(2 2学时)学时)第第1414章章 软件项目管理软件项目管理(2 2学时)学时)第第1515章章 软件项目估算软件项目估算(1 1学时)学时)第第1616章章 软件项目计划与管理软件项目计划与管理(1 1学时)学时)第4页,共92页,编辑于2022年,星期二第第11章章 软件实现软件实现11.1 编码语言编码语言11.2 编码风格编码风格11.3 人机界面设计人机界面设计11.4 案例分析案例分析11.5 实验要求及习题实验要求及习题第5页,共92页,编辑于2022年,星期二 编码的目的编码的目的:实现人和计算机的通信,指挥计算机按人实现人和计算机的通信,指挥计算机按人的意志正确工作。的意志正确工作。编码的任务编码的任务:把软件设计转换成计算机可以接受的程序把软件设计转换成计算机可以接受的程序代码,即写成以某一种程序设计语言表示的代码,即写成以某一种程序设计语言表示的“源程序清源程序清单单”。写出的程序应当是结构良好、清晰易读,并且与。写出的程序应当是结构良好、清晰易读,并且与设计相一致,具有良好的程序设计的风格。设计相一致,具有良好的程序设计的风格。程序设计风格程序设计风格:人们在长期的编程实践中形成的一套独人们在长期的编程实践中形成的一套独特的习惯做法和编程方式。特的习惯做法和编程方式。第7页,共92页,编辑于2022年,星期二11.1 编码语言编码语言编码的目的是实现人和计算机的通信,指挥计算机按人的操作意图正编码的目的是实现人和计算机的通信,指挥计算机按人的操作意图正确工作。确工作。程序设计语言是人和计算机之间进行通信的最基本的工具,其程序设计语言是人和计算机之间进行通信的最基本的工具,其特性会影响人的思维和解决问题的方式。特性会影响人的思维和解决问题的方式。分为两大类:分为两大类:低级语言:这两种语言都依赖于相应的计算机硬件。低级语言:这两种语言都依赖于相应的计算机硬件。机器语言属于第一代语言机器语言属于第一代语言汇编语言属于第二代语言汇编语言属于第二代语言 高级语言:高级语言:第三代程序设计语言利用类英语的语句和命令,尽量不再指导计第三代程序设计语言利用类英语的语句和命令,尽量不再指导计算机如何去完成一项操作,如算机如何去完成一项操作,如BASIC、COBOL和和FORTRAN等。等。第四代程序设计语言比第三代程序设计语言更像英语但过程更弱,第四代程序设计语言比第三代程序设计语言更像英语但过程更弱,与自然语言非常接近,它兼有过程性和非过程性的两重特性,如数与自然语言非常接近,它兼有过程性和非过程性的两重特性,如数据库查询语言、程序生成器等。据库查询语言、程序生成器等。第8页,共92页,编辑于2022年,星期二u 面向机器语言面向机器语言 面向机器语言包括机器语言(Machine Language)和汇编语言(Assemble Language)两种。机器语言是计算机系统可以直接识别的程序设计语言。机器语言程序中的每一条语句实际上就是一条二进制形式的指令代码,由操作码和操作数两部分组成。由于机器语言难以记忆和使用,通常不用机器语言编写程序。汇编语言是一种符号语言,它采用了一定的助记符来替代机器语言中的指令和数据。汇编语言程序必须通过汇编系统翻译成机器语言程序,才能在计算机上运行。汇编语言与计算机硬件密切相关,其指令系统因机器型号的不同而不同。由于汇编语言生产效率低且可维护性差,所以目前软件开发中很少使用汇编语言。第9页,共92页,编辑于2022年,星期二u 高级语言高级语言 高级语言中的语句标识符与人类的自然语言高级语言中的语句标识符与人类的自然语言(英文英文)较为接近,较为接近,并且采用了人们十分熟悉的十进制数据表示形式,利于学习和掌握。并且采用了人们十分熟悉的十进制数据表示形式,利于学习和掌握。高级语言的抽象级别较高,不依赖于实现它的计算机硬件,且编码效高级语言的抽象级别较高,不依赖于实现它的计算机硬件,且编码效率较高,往往率较高,往往一条高级语言的语句对应着若干条机器语言或汇编语一条高级语言的语句对应着若干条机器语言或汇编语言的指令言的指令。高级语言程序需要经过编译或解释之后,才能生成可在计。高级语言程序需要经过编译或解释之后,才能生成可在计算机上执行的机器语言程序。算机上执行的机器语言程序。高级语言按其应用特点的不同,可分为高级语言按其应用特点的不同,可分为通用语言通用语言和和专用语言专用语言两两大类。大类。第10页,共92页,编辑于2022年,星期二 1)1)通用语言通用语言 通用语言是指可用于解决各类问题、可广泛应用于各个领域的程序设计通用语言是指可用于解决各类问题、可广泛应用于各个领域的程序设计语言。从语言。从较早较早出现的基础语言出现的基础语言BasicBasic、FORTRANFORTRAN等,到等,到后来后来出现的结构化语言出现的结构化语言P P、C C等,等,再到再到现在现在被广泛使用的面向对象语言被广泛使用的面向对象语言Visual CVisual C、JavaJava等都属于通用语言的范畴。等都属于通用语言的范畴。2)2)专用语言专用语言 专用语言是为了解决某类特殊领域的问题而专门设计的具有独特语法形式的程序设计专用语言是为了解决某类特殊领域的问题而专门设计的具有独特语法形式的程序设计语言。如专用于处理语言。如专用于处理人工智能人工智能领域问题的领域问题的LISPLISP语言和语言和PROLOGPROLOG语言等。这些语言的共语言等。这些语言的共同特点是可高效地解决本领域的各种问题,但难以应用于其他领域同特点是可高效地解决本领域的各种问题,但难以应用于其他领域。第11页,共92页,编辑于2022年,星期二 程序设计语言具有心理、工程和技术三大特性。1.1.心理特性心理特性 程序体现的是编程者解决问题的思路,不同的人有不同的解题思路,同一个人在不同心理状态下的解题思路往往也会有所不同。所谓程序设计语言的心理特性,就是指能够影响编程者心理的语言性能。这种影响主要表现在以下三个方面:歧义性、简洁性、局部性和顺序性。程序设计语言的特性程序设计语言的特性第12页,共92页,编辑于2022年,星期二 1)歧义性 歧义性指程序设计语言中的某些语法形式使不同的人产生不同的理解。如c语言中的表达式a/c*b有人理解为(a/c)*b,有人却理解为a/(c*b)。当然,这只是由于某些人对语言中某些语法规则的不了解所导致的,对于语言编译系统来说只有确定的一种解释。第13页,共92页,编辑于2022年,星期二 2)简洁性 简洁性指编程者要使用该语言所必须记住的各种语法规则(包括语句格式、数据类型、运算符、函数定义形式等)的信息量。需记忆的信息量越大,简洁性越差,人们掌握起来也就越难。但若程序设计语言的语法成分太少,过于简洁,又会给阅读程序带来麻烦,不利于人的理解。因此对于一个好的程序设计语言来说,既应具有一定的简洁性,又要具有较高的可理解性。第14页,共92页,编辑于2022年,星期二 3)局部性和顺序性 局部性是指语言的联想性,即相关内容的相对集中性。在编程过程中,我们将实现某一功能的语句集中书写在一个模块中,由模块组装成完整的程序,并要求模块具有高内聚、低耦合的特点,其目的就是希望加强程序的局部性。顺序性指语言的线性特征。例如:对于顺序结构的程序人们很容易理解,而如果程序中存在大量的分支结构和循环结构,人们理解起来就比较困难了。语言的局部性和顺序性是由人类习惯于用联想的方式及按逻辑上的线性序列记忆事物的特性所决定的,局部性和顺序性的加强可提高程序的可理解性。第15页,共92页,编辑于2022年,星期二 2.2.工程特性工程特性程序设计语言所应具备的工程特性。语言的工程特性主要体现在以下几个方面:可移植性、语言编译器的实现效率、开发工具的支持、可维护性。1)可移植性 可移植性反映了程序在不同机器环境下的通用性和适应性。不同机器环境包括不同的机型、不同的操作系统版本及不同的应用软件包。若一个程序可不加修改或稍加修改就可以应用于不同的机型、运行于高版本的操作系统或集成到不同的应用软件包中,则称这个程序具有较高的可移植性。第16页,共92页,编辑于2022年,星期二 2)语言编译器的实现效率 不同语言的编译器在将源程序代码翻译成目标代码的过程中,由于编译程序设计质量的不同导致生成的目标代码的大小和执行效率不尽相同。为了获得高效率的目标代码,选择语言时应充分考虑到语言编译器的实现效率。第17页,共92页,编辑于2022年,星期二 3)开发工具的支持 为了缩短编码阶段所花费的时间以及提高编码的质量,应选择具有良好开发工具支持的程序设计语言。这些开发工具主要包括:编译程序、连接程序、交互式调试器、交叉编译器、图形界面及菜单系统生成程序、宏处理程序等。4)可维护性 程序的维护是软件工程活动中的一项重要内容。为了提高程序的可维护性,即方便对源程序的修改,程序中采用的语言必须具有良好的可读性和易于使用的特点。第18页,共92页,编辑于2022年,星期二 3.3.技术特性技术特性 在确定了软件开发项目的需求后,根据项目的特性选择具有相应技术特性的程序设计语言对保证软件的质量具有非常重要的作用。不同的语言具有不同的技术特性,例如:有的语言提供了丰富的数据类型或复杂的数据结构;有的语言具有很强的实时处理能力;有的语言可方便的实现大量数据的查询及增、删、改的功能。根据语言的技术特性为项目选择合适的程序设计语言,不但可以使编写的程序很好地满足项目的要求,而且对后期的测试和维护工作也是非常有益的。第19页,共92页,编辑于2022年,星期二面向对象语言的特点面向对象语言的特点分类:分类:一类是纯面向对象语言,如一类是纯面向对象语言,如Eiffel。其注重其注重OO方方法及快速原型的实现。法及快速原型的实现。另一类是混合型面向对象语言,也就是在过程语言另一类是混合型面向对象语言,也就是在过程语言的基础上增加面向对象机制,如的基础上增加面向对象机制,如C+。其目标是提其目标是提高运行速度及使传统程序员容易接受高运行速度及使传统程序员容易接受OO思想。思想。成熟的面向对象语言都提供丰富的类库和强有力的成熟的面向对象语言都提供丰富的类库和强有力的开发环境。开发环境。超链接:超链接:2010年年8月编程语言排行榜月编程语言排行榜第21页,共92页,编辑于2022年,星期二面向对象语言的特点面向对象语言的特点支持类与对象:支持类与对象:“垃圾垃圾”回收机制回收机制?JavaC+一般一般-特殊结构的名字冲突:特殊结构的名字冲突:重名问题?重名问题?实现属性和服务:实现属性和服务:动态联编?动态联编?动态联编:指应用系统在运行过程中,当需要执行一个特定服务时,选动态联编:指应用系统在运行过程中,当需要执行一个特定服务时,选择实现该服务的适当算法的能力。择实现该服务的适当算法的能力。类型检查:类型检查:强类型与弱类型?强类型与弱类型?类库:类库:包容类、接口类、包容类、接口类、GUI类?类?第22页,共92页,编辑于2022年,星期二选择语言时不能只考虑理论上的标准,而是要同时兼顾理论标准和实用标准。下面分别简要地对选择语言的主要理论标准和实用标准进行介绍。编码语言的选择编码语言的选择 1.1.理论标准理论标准 1)理想的模块化机制、易于阅读和使用的控制结构及数据结构 2)完善、独立的编译机制:完善的编译系统可尽可能多地发现程序中的错误,便于程序的调试和提高软件的可靠性,并且可以使生成的目标代码紧凑、高效;独立的编译机制便于程序的开发、调试和维护,可以降低软件开发和维护的成本。第23页,共92页,编辑于2022年,星期二2.2.实用标准实用标准从以下方面来说明:系统用户的要求、工程的规模、软件的运行环境、可以得到的软件开发工具、软件开发人员的知识、软件的可移植性要求、软件的应用领域。1)系统用户的要求 由于用户是软件的使用者,因此软件开发者应充分考虑用户对开发工具的要求。特别是当用户要负责软件的维护工作时,用户理所应当地会要求采用他们熟悉的语言进行编程。第24页,共92页,编辑于2022年,星期二 2)工程的规模 语言系统的选择与工程的规模有直接的关系。例如,Foxpro与Oracal及Sybase都是数据库处理系统,但Foxpro仅适用于解决小型数据库问题,而Oracal和Sybase则可用于解决大型数据库问题。特别是在如果工程的规模非常庞大,并且现有的语言都不能完全适用时,为了提高开发的效率和质量,就可以考虑为这个工程设计一种专用的程序设计语言。第25页,共92页,编辑于2022年,星期二 3)软件的运行环境 软件在提交给用户后,将在用户的机器上运行,在选择语言时应充分考虑到用户运行软件的环境对语言的约束。此外,运行目标系统的环境中可以提供的编译程序往往也限制了可以选用的语言的范围。4)可以得到的软件开发工具 由于开发经费的制约,往往使开发人员无法任意选择、购买合适的正版开发系统软件。此外,若能选用具有支持该语言程序开发的软件工具的程序设计语言,则将有利于目标系统的实现和验证。第26页,共92页,编辑于2022年,星期二 5)软件开发人员的知识 软件开发人员采用自己熟悉的语言进行开发,可以充分运用积累的经验使开发的目标程序具有更高的质量和运行效率,并可以大大缩短编码阶段的时间。为了能够根据具体问题选择更合适的语言,软件开发人员应拓宽自己的知识面,多掌握几种程序设计语言。6)软件的可移植性要求 要使开发出的软件能适应于不同的软、硬件环境,应选择具有较好通用性的、标准化程度高的语言。第27页,共92页,编辑于2022年,星期二 7)软件的应用领域 任何语言编译系统设计的出发点都有所不同,其对某一领域问题的处理能力也就存在较大差异,因此不存在真正适用于任何应用领域的语言,通用语言也不例外。如FORTRAN语言最适用于工程科学计算,java语言最适用于处理网络编程中的问题。所以,选择语言时一定要充分考虑到软件的应用领域。第28页,共92页,编辑于2022年,星期二 面向对象设计的结果既可以用面向对象语言、也可以面向对象设计的结果既可以用面向对象语言、也可以用非面向对象语言实现。用非面向对象语言实现。使用面向对象语言时,由于语言本身充分支持面向对使用面向对象语言时,由于语言本身充分支持面向对象概念的实现,因此,编译程序可以自动把面向对象概念象概念的实现,因此,编译程序可以自动把面向对象概念映射到目标程序中。映射到目标程序中。使用非面向对象语言编写面向对象程序,则必须使用非面向对象语言编写面向对象程序,则必须由程序员自己把面向对象概念映射到目标程序中。由程序员自己把面向对象概念映射到目标程序中。从原理上说,使用任何一种通用语言都可以实现从原理上说,使用任何一种通用语言都可以实现面向对象概念。面向对象概念。选择编程语言的关键因素,是语言的一致的表达能选择编程语言的关键因素,是语言的一致的表达能力、可重用性及可维护性。力、可重用性及可维护性。第30页,共92页,编辑于2022年,星期二 一致的表示方法一致的表示方法 面向对象开发基于不随时间变化的、一致的表示方法。面向对象开发基于不随时间变化的、一致的表示方法。这种表示方法应该从问题域到这种表示方法应该从问题域到OOA,从,从OOA到到OOD,最后从,最后从OOD到面向对象编程到面向对象编程(OOP),始终稳定不变。,始终稳定不变。一致的表示方法既有利于在软件开发过程中始终一致的表示方法既有利于在软件开发过程中始终使用统一的概念,也有利于维护人员理解软件的各种使用统一的概念,也有利于维护人员理解软件的各种配置成分。配置成分。面向对象语言的优点面向对象语言的优点第31页,共92页,编辑于2022年,星期二 可重用性可重用性 为了能带来可观的商业利益,必须在更广泛的范为了能带来可观的商业利益,必须在更广泛的范围中运用重用机制,而不是仅仅在程序设计这个层次围中运用重用机制,而不是仅仅在程序设计这个层次上进行重用。上进行重用。随着时间的推移,软件开发组织既可能重用它在随着时间的推移,软件开发组织既可能重用它在某个问题域内的某个问题域内的OOA结果,也可能重用相应的结果,也可能重用相应的OOD和和OOP结果。结果。面向对象语言的优点面向对象语言的优点第32页,共92页,编辑于2022年,星期二 可维护性可维护性 尽管人们反复强调保持文档与源程序一致的必要性,尽管人们反复强调保持文档与源程序一致的必要性,但是,在实际工作中很难做到交付两类不同的文档,并但是,在实际工作中很难做到交付两类不同的文档,并使它们保持彼此完全一致。使它们保持彼此完全一致。特别是考虑到进度、预算、能力和人员等限制因特别是考虑到进度、预算、能力和人员等限制因素时,做到两类文档完全一致几乎是不可能的。素时,做到两类文档完全一致几乎是不可能的。维护人员最终面对的往往只有源程序本身。维护人员最终面对的往往只有源程序本身。在选择编程语言时,应该考虑的首要因素,是在供在选择编程语言时,应该考虑的首要因素,是在供选择的语言中哪个语言能最好地表达问题域语义。选择的语言中哪个语言能最好地表达问题域语义。一般说来,应该尽量选用面向对象语言来实现面一般说来,应该尽量选用面向对象语言来实现面向对象分析、设计的结果。向对象分析、设计的结果。面向对象语言的优点面向对象语言的优点第33页,共92页,编辑于2022年,星期二11.2 编码风格编码风格良好的程序设计风格对保证程序质量的重要性。良好的程序设计风格对保证程序质量的重要性。良好的程序设计风格对面向对象实现来说尤其重要,不仅能明良好的程序设计风格对面向对象实现来说尤其重要,不仅能明显减少维护或扩充的开销,而且有助于在新项目中重用已有的显减少维护或扩充的开销,而且有助于在新项目中重用已有的程序代码。程序代码。良好的面向对象程序设计风格,既包括传统的程序设计风格准良好的面向对象程序设计风格,既包括传统的程序设计风格准则,也包括为适应面向对象方法所特有的概念而必须遵循的一则,也包括为适应面向对象方法所特有的概念而必须遵循的一些新准则。些新准则。编码风格指一个人编制程序时所表现出来的特点、习惯、编码风格指一个人编制程序时所表现出来的特点、习惯、逻辑思路等。逻辑思路等。良好的编码风格可以减少编码的错误,减少读程序的时间,良好的编码风格可以减少编码的错误,减少读程序的时间,从而提高软件的开发效率。从而提高软件的开发效率。良好的编码风格体现在源程序文档化、数据说明、语句构良好的编码风格体现在源程序文档化、数据说明、语句构造、输入和输出及对效率的追求等几个方面。造、输入和输出及对效率的追求等几个方面。第34页,共92页,编辑于2022年,星期二编码风格编码风格 编码风格是指在不影响程序正确性和效率的前提下,有效编排和合理组织程序的基本原则。良好编码风格主要表现:可读性好、易测试、易维护。编码风格的好坏直接影响着整个软件开发中成本耗费的多少。特别是在需要团队合作开发大型软件的时候,编码风格显得尤为重要。我们将从以下几个方面来说明编码风格:内部文档、标识符的命名及说明、语句的构造及书写、输入/输出。第35页,共92页,编辑于2022年,星期二 1.1.内部文档内部文档 所谓内部文档,是指程序中的说明性注释信息。在程序中加入注释信息的目的是为了提高程序的可读性,为程序的测试和维护带来方便。几乎所有的程序设计语言中都提供了专用于书写注释信息的注释语句。为了使程序易于阅读和修改,应在必要的地方加上相应的注释。在修改程序时,不要忘记对相应的注释也要进行修改。程序中的注释一般可按其用途分为两类:序言性注释和描述性注释。编码风格编码风格第36页,共92页,编辑于2022年,星期二 1)序言性注释 序言性注释一般位于模块的首部,用于说明模块的相关信息。主要包括:对模块的功能、用途进行简要说明;对模块的界面进行描述,如调用语句的格式、各个参数的作用及需调用的下级模块的清单等;对模块的开发历史进行介绍,如模块编写者的资料、模块审核者的资料及建立、修改的时间等;对模块的输入数据或输出数据进行说明,如数据的格式、类型及含义等。编码风格编码风格第37页,共92页,编辑于2022年,星期二 2)描述性注释 描述性注释位于源程序模块内部,用于对某些难以理解的语句段的功能或某些重要的标识符的用途等进行说明。通过在程序中加入恰当的描述性注释可以大大提高程序的可读性和可理解性,对语句的注释应紧跟在被说明语句之后书写。注意:并不是对所有程序中的语句都要进行注释,太多不必要的注释反而会影响人们对程序的阅读。6.2.1 编码风格编码风格第38页,共92页,编辑于2022年,星期二 2.2.标识符的命名及说明标识符的命名及说明 编程者随心所欲地进行标识符的命名和说明,可能就会给阅读程序带来麻烦。1)标识符的命名 为了便于阅读程序时对标识符作用进行正确的理解,标识符的命名应注意以下几个问题:编码风格编码风格第39页,共92页,编辑于2022年,星期二 (1)选用具有实际含义的标识符,如用于存放年龄的变量名最好取age,用于存放学生信息的数组名最好取student。若标识符由多个单词构成,则每个单词的第一个字母最好采用大写或单词间用下划线分隔,以利于对标识符含义的理解。(2)为了便于程序的输入,标识符的名字不宜过长,通常不要超过八个字符。特别是对于那些对标识符长度有限制的语言编译系统来说,取过长的标识符名没有任何的意义。如在FORTRAN 77中,通常编译系统可以区分的标识符长度不超过六个字符。(3)为了便于区分,不同的标识符不要取过于相似的名字。如student和students,很容易在使用或阅读时产生混淆。第40页,共92页,编辑于2022年,星期二 2)标识符的说明 由于程序中通常需要使用大量不同类型的标识符,为了使说明部分阅读起来更加清晰,在对其进行类型说明时应注意以下几点:(1)应按照某种顺序分别对各种类型的变量进行集中说明,如:先说明简单类型,再说明指针类型,再说明记录类型;对简单类型的变量进行说明时,可先说明整型,再说明实型,再说明字符型等等。(2)在使用一个说明语句对同一类型的多个变量进行说明时,应按照变量名中的字母顺序(az)对其进行排列。第41页,共92页,编辑于2022年,星期二3.3.语句的构造及书写语句的构造及书写 语句是构成程序的基本单位,语句的构造方式和书写格式对程序的可读性具有非常重要的决定作用。1)语句构造 (1)语句应简单直接,避免使用华而不实的程序设计技巧。如为了求出x、y两个数中的较大数,以下两个C语句均可实现:方法一:max=(x+y+abs(xy)/2;方法二:max=(xy)?x:y;显然,方法二的可读性要比方法一好得多。第42页,共92页,编辑于2022年,星期二 (2)对复杂的表达式应加上必要的括号使表达更加清晰。如C语言中判断闰年的表达式若写为 (year%400=0)|(year%4=0&year%100!=0)则比不加括号时看起来清晰得多。(3)由于人的一般思维方式对逻辑非运算不太适应,因此在条件表达式中应尽量不使用否定的逻辑表示。如Pascal中的条件表达式 not(x=5)and(x=10),若表示为(x10)则更加直观和清晰。第43页,共92页,编辑于2022年,星期二 (4)为了不破坏结构化程序设计中结构的清晰性,在程序中应尽量不使用强制转移语句GOTO。(5)为了便于程序的理解,不要书写太复杂的条件,嵌套的重数也不宜过多。(6)为了缩短程序的代码,在程序中应尽可能地使用编译系统提供的标准函数。对于程序中需要重复出现的代码段,应将其用独立模块(函数或过程)实现(例如:重构)。第44页,共92页,编辑于2022年,星期二 2)书写格式 为了便于人们对程序(特别是大型程序)的阅读,清晰整齐的书写格式是必不可少的。以下列出了书写程序时需注意的几个主要问题。(1)虽然许多语言都允许在一行上书写多个语句,但为了程序看起来更加清楚,最好在一行上只书写一条语句。(2)在书写语句时,应通过采用递缩式格式使程序的层次更加清晰。(3)在模块之间通过加入空行进行分隔。(4)为了便于区分程序中的注释,最好在注释段的周围加上边框。第45页,共92页,编辑于2022年,星期二 4.4.输入输入/输出输出 输入、输出的方式往往是用户衡量程序好坏的重要指标。为了使程序的输入、输出能便于用户的使用,在编写程序时应对输入和输出的设计格外注意。1)输入 在运行程序时,原始数据的输入工作通常要由用户自己完成。为了使用户能方便地进行数据的输入,应注意以下六点:6.2.1 编码风格编码风格第46页,共92页,编辑于2022年,星期二(1)输入方式应力求简单,尽量避免给用户带来不必要的麻烦。如:尽可能采用简单的输入格式、尽可能减少用户的输入量。(2)交互式输入数据时应有必要的提示信息。(3)程序应对输入数据的合法性进行检查。(4)若用户输入某些数据后可能会产生严重后果,应给用户输出必要的提示并在必要的时候要求用户确认。(5)当需要输入一批数据时,不要以记数方式控制数据的输入个数,而应以特殊标记作为数据输入结束的标志。(6)应根据系统的特点和用户的习惯设计出令用户满意的输入方式。第47页,共92页,编辑于2022年,星期二 2)输出 用户需要通过程序的输出来获取加工的结果。为了使用户能够清楚地看到需要的结果,设计数据输出方式时应注意以下几点:(1)输出数据的格式应清晰、美观。如对大量数据采用表格的形式输出,可以使用户一目了然。(2)输出数据时要加上必要的提示信息。例如,表格的输出一定要带有表头,用以说明表格中各项数据的含义。6.2.1 编码风格编码风格第48页,共92页,编辑于2022年,星期二 软件的“高效率”,即用尽可能短的时间及尽可能少的存储空间实现程序要求的所有功能,是程序设计追求的主要目标之一。一个程序效率的高低取决于多个方面,主要包括需求分析阶段模型的生成、设计阶段算法的选择和编码阶段语句的实现。正由于编码阶段在很大程度上影响着软件的效率,因此在进行编码时必须充分考虑程序生成后的效率。软件效率的高低是一个相对的概念,它与程序的简单性直接相关,不应因过分追求高效率而忽视了程序设计中的其他要求。一定要遵循“先使程序正确,再使程序有效率;先使程序清晰,再使程序有效率”的准则。软件效率的高低应以能满足用户的需要为主要依据。在满足以上原则的基础上,可依照下述方法来提高程序的效率。软件效率软件效率第49页,共92页,编辑于2022年,星期二 1.1.用于提高运行速度的指导原则用于提高运行速度的指导原则 为了提高程序的运行速度,应尽量避免和简化复杂的运算,为此应遵循以下原则:(1)编写程序之前,先对需要使用的算术表达式和逻辑表达式进行化简。(2)尽可能多地采用执行时间短的算术运算。(3)尽量避免使用多维数组、指针和其他复杂的数据类型。(4)尽量采用整型算术表达式和布尔表达式。软件效率软件效率第50页,共92页,编辑于2022年,星期二 (5)尽可能减少循环体,特别是内循环中语句的个数。(6)尽量使同一表达式中的数据类型保持统一。需要特别强调的是,应尽量避免不同类型数据的比较运算,因为这样有可能导致程序运行出错。(7)应当对所有的输入和输出安排适当的缓冲区,以减少频繁通信所带来的额外开销。软件效率软件效率第51页,共92页,编辑于2022年,星期二 2.2.用于优化存储空间使用的指导原则用于优化存储空间使用的指导原则 (1)对于变动频繁的数据最好采用动态存储。(2)可根据需要采用存储单元共享等节约空间的技术。(3)选用具有紧缩存储器特性的编译程序,在必要时甚至可采用汇编语言。(4)采用结构化程序设计,将程序划分为大小合适的模块。一个模块或若干个关系密切的模块的大小最好与操作系统页面的容量相匹配,以减少页面调度的次数,提高存储效率。软件效率软件效率第52页,共92页,编辑于2022年,星期二面向对象编码原则面向对象编码原则提高可复用性提高可复用性 软件复用软件复用(SoftWare Reuse)是将已有软件的各种有关知识是将已有软件的各种有关知识用于建立新的软件用于建立新的软件,以缩减软件开发和维护的花费。软件复用的以缩减软件开发和维护的花费。软件复用的级别:级别:(1)代码的复用;代码的复用;(2)设计结果的复用;设计结果的复用;(3)分析结果的复用;分析结果的复用;(4)测试信息的复用。测试信息的复用。第54页,共92页,编辑于2022年,星期二面向对象编码原则面向对象编码原则提高可复用性提高可复用性减小方法的规模,提高方法的内聚减小方法的规模,提高方法的内聚方法的一致性方法的一致性策略与实现分开:一类是做出决策方法,提供变量,策略与实现分开:一类是做出决策方法,提供变量,并且管理全局资源,称为并且管理全局资源,称为策略方法策略方法。另一类是完成。另一类是完成具体的操作方法,但却并不作出是否执行这个操作具体的操作方法,但却并不作出是否执行这个操作的决定,也不知道执行这个操作的愿意,称为的决定,也不知道执行这个操作的愿意,称为实现实现方法方法。覆盖全面覆盖全面少用全局信息少用全局信息利用继承机制利用继承机制第55页,共92页,编辑于2022年,星期二面向对象编码原则面向对象编码原则提高可扩充性提高可扩充性封装实现策略封装实现策略减小方法的规模减小方法的规模少使用多分支语句,少使用多分支语句,合理利用多态合理利用多态精心设计公有方法精心设计公有方法提高健壮性提高健壮性 健壮性是指软件对于规范要求以外的输入情况的处理能力。健壮性是指软件对于规范要求以外的输入情况的处理能力。健壮的系统是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,健壮的系统是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。并能有合理的处理方式。预防用户错误操作预防用户错误操作不要预先确定限制条件不要预先确定限制条件先测试后优化先测试后优化第56页,共92页,编辑于2022年,星期二11.3 人机界面设计人机界面设计人机界面设计的任务,就是根据对用户在使用交互人机界面设计的任务,就是根据对用户在使用交互式系统时的所作所为,或者是用户想象中的所作所式系统时的所作所为,或者是用户想象中的所作所为,或者是他人想象中用户的所作所为的抽象,创为,或者是他人想象中用户的所作所为的抽象,创建或导出一致的表示界面。建或导出一致的表示界面。设计人机界面要充分考虑到人的因素,如用户的特设计人机界面要充分考虑到人的因素,如用户的特点、用户怎样学会与系统交互工作、用户怎样理解点、用户怎样学会与系统交互工作、用户怎样理解系统产生的输出信息以及用户对系统有什么期望等。系统产生的输出信息以及用户对系统有什么期望等。考虑界面的风格,可用的软、硬件技术及应用本身产考虑界面的风格,可用的软、硬件技术及应用本身产生的影响。生的影响。第57页,共92页,编辑于2022年,星期二5845人的因素人的因素人的因素主要包括人的因素主要包括:人对感知过程的认识人对感知过程的认识用户的技能和行为方式用户的技能和行为方式用户所要求完成的整个任务以及用户对人机界面用户所要求完成的整个任务以及用户对人机界面部分的特殊要求部分的特殊要求第58页,共92页,编辑于2022年,星期二5945人对感知过程的认识人对感知过程的认识设计用户界面时要充分考虑人的视觉、触觉、听觉的作设计用户界面时要充分考虑人的视觉、触觉、听觉的作用。用。人机界面中的字体、大小、位置、颜色、形状等都会直人机界面中的字体、大小、位置、颜色、形状等都会直接影响信息提取的难易程度。很好地表示可视信息是设接影响信息提取的难易程度。很好地表示可视信息是设计友好界面的关键。计友好界面的关键。在设计人机界面时不要用户记住复杂的操作顺序。在设计人机界面时不要用户记住复杂的操作顺序。设计人机界面时应便于用户积累有关交互工作的经验,注意启设计人机界面时应便于用户积累有关交互工作的经验,注意启发式策略的一致性,不宜受特殊交互的影响。如发式策略的一致性,不宜受特殊交互的影响。如undoundo、exitexit等等有统一的含义、位置和表示。有统一的含义、位置和表示。第59页,共92页,编辑于2022年,星期二6045用户的技能和行为方式用户的技能和行为方式用户本身的技能、个性上的差异、行为方式的不用户本身的技能、个性上的差异、行为方式的不同,都可能对人机界面造成影响。不同类型的人同,都可能对人机界面造成影响。不同类型的人对同一界面的评价也不同。对同一界面的评价也不同。终端用户的技能直接影响他们从人机界面上获取信息终端用户的技能直接影响他们从人机界面上获取信息的能力,影响交互过程中对系统作出反应的能力,以的能力,影响交互过程中对系统作出反应的能力,以及使用启发式策略与系统和谐地交互的能力及使用启发式策略与系统和谐地交互的能力应根据用户的特点设计人机界面应根据用户的特点设计人机界面 (用户类型用户类型:外行型、初学型、熟练型、专家型外行型、初学型、熟练型、专家型)第60页,共92页,编辑于2022年,星期二6145人机界面风格第一代:命令和询问方式的界面第一代:命令和询问方式的界面 正文形式的通信,通过用户命令和用户对系统询正文形式的通信,通过用户命令和用户对系统询问的响应来完成。由于使用正文通信,因此用户容易问的响应来完成。由于使用正文通信,因此用户容易出错,界面不友善,难以学习。出错,界面不友善,难以学习。第二代:简单的菜单式界面第二代:简单的菜单式界面 与第一代界面相比不易出错,但使用起来乏味,与第一代界面相比不易出错,但使用起来乏味,逐层进行不能一步到位。逐层进行不能一步到位。第61页,共92页,编辑于2022年,星期二6245 第三代:窗口、图标、菜单、指示器四位一体的第三