代码大全内容简介.pptx

上传人:一*** 文档编号:77809185 上传时间:2023-03-16 格式:PPTX 页数:38 大小:1.71MB
返回 下载 相关 举报
代码大全内容简介.pptx_第1页
第1页 / 共38页
代码大全内容简介.pptx_第2页
第2页 / 共38页
点击查看更多>>
资源描述

《代码大全内容简介.pptx》由会员分享,可在线阅读,更多相关《代码大全内容简介.pptx(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、2、用隐喻来更充分的理解软件开发、用隐喻来更充分的理解软件开发 这章总的来说可读可不读,比较理论。我们平时把软件编码叫做写代码,让外行人听起来像是在写文章,就是把你心里的想法一点一点的有条理的写出来,在这一点上,编码和写文章确实有相似之处,但写文章一般是你自己写,编码则需要和别人合作。还有在软件设计的时候,我们经常拿盖房子来比喻,盖房子之前要先画好蓝图,整体结构,考虑好水、电的布局等,盖一个小狗窝和盖一栋大楼的过程也是不一样的,做一个小软件和一个超大型的软件的过程也是不一样的。如果你能很好把软件的开发过程想象成某些生活中具体的例子,找到他们的相似之处和不同之处,你就能更好的理解软件开发,以及利

2、用这些隐喻来与人更好的沟通。你脑子里如果有很多这样的隐喻,在你做软件设计时就会不经意的想起来,成为你思考和权衡不同方案的工具。第1页/共38页3、三思而后行:前期准备、三思而后行:前期准备 做任何事情都需要前期准备,在软件开发中更是如此,尽管如此,还是有很多程序员接到任务后就是想着尽快编码。要想保证一个软件的质量,在前期准备,需求分析,架构设计,编码,测试,维护等每一个环节都要重视质量。具体程序员接到任务的时候要检查一下在你之前的那些软件活动有没有准备好,如果需求中有好多没有说明的地方,架构设计也不明确,你不知道需要和其它模块之间如何通信,基础组件啥也没有,这种情况下进行详细设计和编码会很受罪

3、。和老板同事达成前期准备重要性的共识之后,就是如何做前期准备以及如何判断前期准备已经做好的技巧,这些是更实用的地方。如何做前期准备基本上是需求分析人员,产品经理和架构师的关心的问题,而判断前期准备是否已准备好则是具体程序员也需要具备的能力。所以我们在开发之前要要先通读特性文档的内容,看看设计上是不是有疑难的地方、有不明确的地方、有不理解的地方等,及时沟通解决问题。前期准备所花费的时间是不容易把握的,也没有个固定的衡量标准,但前期准备是必须要做的,前期准备的根本目的是降低风险,提高项目质量。第2页/共38页4、防错编程、防错编程4.1 对错误输入的保护4.2 错误处理技术4.3 异常防御式编程,

4、这一概念来自 防御式驾驶,在防御式驾驶中要建立这样一种思维,那就是你永远也不能确定另一位司机将要做什么。这样才能保证在其他人做出危险动作时你也不会受到伤害。防御式编程主要思想:子程序应该不因传入错误数据而被破坏,哪怕是有其他子程序产生的错误数据。第3页/共38页4.1 对错误输入的保护对错误输入的保护检查所有外部进来的数据如文件、用户、网络或其他外部接口获取数据时,应检查获得数据,确保他在允许的范围内。对应数值要要确保在允许的范围内,对于字符串要确保其不超长等。检查所有输入参数的值决定如何处理错误的输入数据 要根据具体的使用情况,后面会讲第4页/共38页4.2错误处理技术错误处理技术主要有以下

5、几种方法1、返回中立值有时候错误处理的最佳方法就是继续执行操作并返回一个没有危害的数值,比如数值计算可以返回0,字符串可以返回空字符串,好像我们的SPF类,再比如一个绘图的功能,如果接收到一个错误的颜色可以使用默认颜色继续绘制,当然如果是癌症病人的X光片的绘图程序,还是不要现实某个“中立值”,人家会找你拼命的,这时候关闭程序会比限时错误的病人数据要好。2.换用下一个正确的数据在处理数据流的时候返回下一个正确的数据即可。如果你在读取数据库时候发现一条数据已经损坏,可以继续读下去找到正确的记录位置。比如你以每秒100次的速度读取体温计的数据,那么如果某一次的数据读取错误,你只需要等待1/100然后

6、继续读取即可。3、返回和上次相同的数据比如某些情况下你没有读取到数据,那么可以简单的返回前一次的结果。当然如果你在管理ATM机上操作,你可能就不希望返回上一个结果了,因为那可能是前一个用户的银行帐号。第5页/共38页4.2错误处理技术错误处理技术4、换用最接近的合法值比如体温计的数据定义在1-100之前,如果你获得数据小于0,你可以把他替换为0就是最接近的合法值,同样大于100就替换为100,生活中的例子就是倒车,倒车时速度表无法负的速度,所以直接显示0。5.把警告信息记录到日志文件中在检测到错误的时候你可以在日志文件中增加一条警告信息,然后继续执行,方便查询总结,比如系统日志。6、返回一个错

7、误代码7、调用错误处理函数/对象优点是:集中处理,调用更简单缺点是耦合性太强,不容移植,如果出现安全问题容易被攻击。8、错误发生时显示出错误不要破坏界面的一致性,攻击者可能会利用这个找到漏洞,所以我们要求不能显示.net的黄页一样。第6页/共38页4.2错误处理技术错误处理技术9、用最妥当的方式在局部处理7、关闭/停止程序有些系统一旦检查到错误就会关闭,这通常是遇到比较严重或者安全攸关的功能上,比如windows的安全日志即使满了,也会正常工作,但你可以配置windows,让它在日志满的时候停止服务,在安全信息攸关的环境下中这样做是明智的。第7页/共38页4.3异常处理异常处理异常是把代码中的

8、错误或者异常事件传递给调用方的特殊手段。如果在程序中遇到了意料之外的情况就可以抛出异常。异常要审慎明智的使用,下面给出一些异常上的建议。抛出异常,让其他部分去解决问题只有在真正的异常才使用,不能到处try-catch不能用异常来推卸责任,尽量局部处理不要在构造和析构函数中使用异常。5、正确的抽象级上使用异常6、异常信息应该包含详细的异常数据,便于解读。7、不要使try-catch为空,一定要进行处理,也不能让try为空。所以说尽量建立集中的异常处理报告,规范化异常使用,甚至考虑不用异常,使用其他方法替换。第8页/共38页5、使用条件语句、使用条件语句简单的简单的 if-else 格式格式使用使

9、用 if-else 虽然很简答,但是有很多细节应该注意虽然很简答,但是有很多细节应该注意:1.先写很正常很普通的分支,再写不寻常的分支先写很正常很普通的分支,再写不寻常的分支好处:这样可以突出判断的主体部分,不至于让次要的部分混淆程序执行的过程,使程序易读。2.在分支中要特别注意相等的条件,确保其正确性在分支中要特别注意相等的条件,确保其正确性使用 没有使用=来的清晰,这样可能会犯在数组中类似的越界错误第9页/共38页5.1、if 语句语句3.把正常情况下执行的代码放在把正常情况下执行的代码放在if后面,而不是防在后面,而不是防在else后面后面 把想要在正常情况下执行的代码放在前面,这样可以

10、使程序的功 清晰易读,清楚地了解到程序究竟是做什么功能的。第10页/共38页5.1、if 语句语句第11页/共38页5.1、if 语句语句第12页/共38页5.1、if 语句语句4.If 后面的子句要有一个有意义的意思。可以省去后面的子句要有一个有意义的意思。可以省去else子句子句 bad:if(SomeTest)good:if(!SomeTest):elseDoSomething()DoSomething()第13页/共38页5.1、if 语句语句5.考虑考虑 else 子句子句 else子句尽量不要省略,以免发生没有考虑到的错误,除非在显而易见的情况下才可以省略。6.检查检查 else

11、子句的正确性子句的正确性 检查的重点应该是程序的主要部分,即if部分,有可能的话,也 要检查else部分7.检查是不是把检查是不是把if 和和 else 里的处理页反了里的处理页反了 这是个常见的错误,一定要注意小心避免第14页/共38页5.1、if 语句语句If else if else 链式操作下面给出关于if-else if-else操作的一些建议 1.用返回布尔值的函数来代替复杂的逻辑表达式用返回布尔值的函数来代替复杂的逻辑表达式如果判断的条件是复杂的表达式的话,程序既不易读,也不易修改。第15页/共38页1、if 语句语句2.把最常见的情况放在最前面把最常见的情况放在最前面最常见的情

12、况放在前面可以增加程序的可读性,使人阅读程序时提高效率。3.确保所有的路径都被覆盖确保所有的路径都被覆盖 在程序的最后再加上一个 else,并且在这个判断里面使用断言或者给程序员显示警告。这里,出错的信息是给程序员看的,方便开发期间的调试工作。4.如果程序语言支持的话,使用别的机制来代替如果程序语言支持的话,使用别的机制来代替if else if-else结构结构 可以使用case来代替。第16页/共38页5.2、Case 语句语句 Case 语句是很常用的,在Java C#语言里,使用switch case 机制。下面给出使用Case需要注意的一些地方使用效率最高的使用效率最高的 Case

13、的组合的顺序的组合的顺序 如果Case的分支不是很多,安排他们的顺序就无关紧要,若分支太多的话,就很重要了。第17页/共38页5.2、Case 语句语句1.以数字或者字母的顺序来安排以数字或者字母的顺序来安排如果这些分支的重要性差不多的话,就使用字母序或数字来标记他们,这样一可以易读,二可以很方便的找到该分支2.正常情况下的分支要放在最前面正常情况下的分支要放在最前面这样可以指示那些分支是正常的,哪些是不正常的。3.把访问频率高的分支放在前面,低的放在后面把访问频率高的分支放在前面,低的放在后面这样一可以增加可读性,使读者清楚看到哪个分支最为常用,同时,也提高了执行效率,加快索引。第18页/共

14、38页5.2、Case 语句语句使用使用 Case 语句的一些建议语句的一些建议1.每一个每一个 Case 里的操作都应该简单里的操作都应该简单好处:短的代码清晰易读,增加可读性,如果代码很长的话,就把它们单独放在一个模块里。2.不要使用容易出错的变量来作为条件不要使用容易出错的变量来作为条件作为判断的变量应该简单,下面一个例子是以用户输入参数的第一个字母作为标志的,(switch后面只能跟整型和字符型)这样很容易出错,如果非要那样做的话,就不应该使用if-else if-else,然后把判断的语句写全。第19页/共38页5.2、Case 语句语句第20页/共38页5.2、Case 语句语句第

15、21页/共38页2、Case 语句语句3.尽量不要使用默认的分支来检查合法的分支尽量不要使用默认的分支来检查合法的分支如果没有使用default子句,而仅仅是在case里面做一些处理的话,这样可能会使程序以后维护起来比较麻烦,修改case 语句很不方便。尽量不要使用default来做检查,而是采用多写case的方法。4.使用使用 default 子句来检查错误子句来检查错误如果在程序中必须要有一个case 后面的部分不会被执行,那么default里面就写上显示出错的代码。5.在每一在每一case的最后别忘了写上的最后别忘了写上break 类似于C的语言都必须要写上break 以便能跳得出来,如

16、果不写的话就会跳到下一个case 里面去。6.如果非要在程序中执行两个以上的如果非要在程序中执行两个以上的case的内容的内容(case嵌套嵌套if)的时候,一定要注释清楚,的时候,一定要注释清楚,个人建议还是不要这样嵌套,还不如使用个人建议还是不要这样嵌套,还不如使用if-else if-else。第22页/共38页5.2、使用前的提示、使用前的提示在使用条件判断语句的时候,一定要检查是不是符合下面的要求在使用条件判断语句的时候,一定要检查是不是符合下面的要求If-else 语句:语句:1.主体部分是不是在 if 语句中清晰的表达了?2.在检查等号条件是不是正确的?会不会发生越界错误?3.是

17、不是缺少else子句?4.Else子句是不是正确的使用了?5.If 和 else中分别需要做的工作又没有混淆?6.正常情况下的处理应该由if 来完成,是不是弄到else 里了。第23页/共38页5.3、使用前的提示、使用前的提示If-else if-else 结构需要注意的地方结构需要注意的地方1.复杂的逻辑表达式是不是封装在单独的函数中?通过函数调用的方式来实现判断而不是直接写在if里面?2.是不是最常见的操作放在最前面?3.是不是所有的路径都覆盖了?4.是不是整个结构都按照合理的方式来执行?第24页/共38页5.3、使用前的提示、使用前的提示Switch Case 语句语句1.是不是所有的

18、case都按照有意义的顺序排列?2.是不是每个case里的操作都很简单,通过函数调用来实现?3.是不是合法的使用了default语句?4.Default语句后面是不是有处理错误和报告错误的代码?5.在c c#java里是不是在每个case 后面跟上break?第25页/共38页6、控制循环、控制循环选择循环类型循环控制写循环简单的方法从内到外第26页/共38页6.1 选择循环类型选择循环类型循环类型:大多数语言中你只能用到少数的几种循环计数循环,执行的次数是固定的条件循环,预先不知道会运行多少次,他会在每次迭代时检查。死循环,一旦启动就一直执行下去,知道死亡,你可能在心脏起搏器等嵌入式系统能找

19、到。迭代循环,对容器类里的每个元素都执行一次操作比如foreach。第27页/共38页6.1 选择循环类型选择循环类型什么时候用while循环如果你不知道循环的次数,那么用whileWhile也可以loop-with-exit循环(带退出的的循环)while(true)a+;if(符合退出条件)break;第28页/共38页6.1 选择循环类型选择循环类型什么时候用for循环循环确切次数若是有中间中断的情况,或是靠条件退出,用while替代什么时候用foreach循环Foreach循环适用于对数组或者其他容器的各项元素进行操作,比如我们会使用foreach循环list中的数据Foreach(对

20、象 in list对象)第29页/共38页2 2 循环控制循环控制循环易犯的错误:忽略了与循环有关的变量或累加器初始化、不正确的嵌套、不正确的循环中断、忘记给循环变量一个增量或给错了增量、用不正确的循环指标访问数组元素。while(!inputFile.EndOfFile()&moreDataAvailable)black box这个循环的终止的条件是什么,很明显要么inputFile.EndOfFile()为真,要么moreDataAvailable为假,然后进入循环第30页/共38页2 2 循环控制循环控制进入循环进入循环只从一个地方进入循环;初始化代码紧放在循环前面,就近原则把相关代码放

21、到一起。适当的情况下多使用for循环条件都在循环头部,相对while还要修改底部更好维护。用while(true)表示无限循环。在更合适while的时候不要用for。for(inputFile.MoveToStart(),recordCount=0;!inputFile.EndOfFile();recordCount+)inputFile.GetRecord();recordCount+并不是控制循环的,控制循环结束的是inputFile.GetRecord();第31页/共38页6.2 2 循环控制循环控制正确的使用方法recordCount=0;for(inputFile.MoveToSt

22、art();!inputFile.EndOfFile();inputFile.GetRecord()recordCount+;inputFile.MoveToStart();对循环进行初始化,inputFile.EndOfFile();检测循环是否已经终止,inputFile.GetRecord()则是把循环推向终止,while做更清晰 inputFile.MoveToStart();recordCount=0;while(!inputFile.EndOfFile()inputFile.GetRecord();recordCount+;第32页/共38页6.2 2 循环控制循环控制处理循环体的

23、注意处理循环体的注意用 括起循环;将循环管理(如i+)放在循环头或尾部每个循环只做一件事避免空循环;while(inputChar=cin.get()!=n);这里例子产生空循环的原因是因为while表达式包含了两项操作,循环工作和判断是否终止的操作,下面的重写更加清晰do inputChar=cin.get();while(inputChar!=n);第33页/共38页6.2 6.2 循环控制循环控制退出循环的注意退出循环的注意确保循环能结束,这是基本要求可以模拟设想一下。让循环的终止条件看起来更明显,大概是说不要多出设置循环的退出条件。不要随意改变for的循环计数器,使其提前终止第34页/

24、共38页6.2 2 循环控制循环控制提前退出循环提前退出循环小心使用小心使用breakbreak和和continuecontinue考虑用break,而不用boolean flag不要使过多的break过于分散在循环中用continue在循环头部测试,一种好的方法是,在循环开始初做完条件判断后让代码越过剩下的循环体继续运行。,如果在循环中要阅读记录并且要忽略掉一种记录,那么可以这么判断第35页/共38页6.2 2 循环控制循环控制循环要多长?循环要多长?最好短的一下能看完限制在3层嵌套把循环内过长的部分封装在函数内长的循环一定要写注释写循环简单的方法写循环简单的方法从内到外从内到外从最本质的工作写起,然后加上外面的控制条件第36页/共38页Thats all!Thank you!第37页/共38页感谢您的观看!第38页/共38页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文献 > 管理工具

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁