代码大全2培训.ppt_第1页
代码大全2培训.ppt_第2页
代码大全2培训.ppt_第3页
代码大全2培训.ppt_第4页
代码大全2培训.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

2010年12月29日培训 1 欢迎进入软件的世界 这章阐述了软件构建的重要性 软件构建大体上就是说具体程序员做的工作 而不是需求收集 产品设计 业务分析 测试 运维人员等做的工作 虽然这些人的工作在整个软件开发生命周期中也非常的重要 但是一个软件开发的最主要的部分却是具体程序员做的那部分事情 一般的软件公司里具体程序员的数量应该占很大的比重 大多数的程序员也是具体程序员 只有很少的程序员经过多年的工作学习能成为项目经理 业务分析人员 架构师等高级软件从业人员 具体程序员做什么工作呢 理解架构师做出的架构设计 做你负责的模块的详细设计 做出自己的负责模块的开发计划 编码 测试 解决测试人员提出的BUG 以及网站上线后排查线上的问题等等 如果你做的是这些工作 那你就是具体程序员 你做的大多事情就是软件构建的事情 只要你是个程序员 就应该系统的 好好的学习下软件构建的技能和知识 这比你学很多种语言 尝试很多种花哨的新技术要值很多 至少我看了这本书的其中几章有这个体会 第一次认真考虑软件构建中的一些基础的 细节的 基本的 通用的思维方式 编码技巧和规范 2 用隐喻来更充分的理解软件开发 这章总的来说可读可不读 比较理论 我们平时把软件编码叫做写代码 让外行人听起来像是在写文章 就是把你心里的想法一点一点的有条理的写出来 在这一点上 编码和写文章确实有相似之处 但写文章一般是你自己写 编码则需要和别人合作 还有在软件设计的时候 我们经常拿盖房子来比喻 盖房子之前要先画好蓝图 整体结构 考虑好水 电的布局等 盖一个小狗窝和盖一栋大楼的过程也是不一样的 做一个小软件和一个超大型的软件的过程也是不一样的 如果你能很好把软件的开发过程想象成某些生活中具体的例子 找到他们的相似之处和不同之处 你就能更好的理解软件开发 以及利用这些隐喻来与人更好的沟通 你脑子里如果有很多这样的隐喻 在你做软件设计时就会不经意的想起来 成为你思考和权衡不同方案的工具 3 三思而后行 前期准备 做任何事情都需要前期准备 在软件开发中更是如此 尽管如此 还是有很多程序员接到任务后就是想着尽快编码 要想保证一个软件的质量 在前期准备 需求分析 架构设计 编码 测试 维护等每一个环节都要重视质量 具体程序员接到任务的时候要检查一下在你之前的那些软件活动有没有准备好 如果需求中有好多没有说明的地方 架构设计也不明确 你不知道需要和其它模块之间如何通信 基础组件啥也没有 这种情况下进行详细设计和编码会很受罪 和老板同事达成前期准备重要性的共识之后 就是如何做前期准备以及如何判断前期准备已经做好的技巧 这些是更实用的地方 如何做前期准备基本上是需求分析人员 产品经理和架构师的关心的问题 而判断前期准备是否已准备好则是具体程序员也需要具备的能力 所以我们在开发之前要要先通读特性文档的内容 看看设计上是不是有疑难的地方 有不明确的地方 有不理解的地方等 及时沟通解决问题 前期准备所花费的时间是不容易把握的 也没有个固定的衡量标准 但前期准备是必须要做的 前期准备的根本目的是降低风险 提高项目质量 4 防错编程 4 1对错误输入的保护4 2错误处理技术4 3异常 防御式编程 这一概念来自防御式驾驶 在防御式驾驶中要建立这样一种思维 那就是你永远也不能确定另一位司机将要做什么 这样才能保证在其他人做出危险动作时你也不会受到伤害 防御式编程主要思想 子程序应该不因传入错误数据而被破坏 哪怕是有其他子程序产生的错误数据 4 1对错误输入的保护 检查所有外部进来的数据如文件 用户 网络或其他外部接口获取数据时 应检查获得数据 确保他在允许的范围内 对应数值要要确保在允许的范围内 对于字符串要确保其不超长等 检查所有输入参数的值决定如何处理错误的输入数据要根据具体的使用情况 后面会讲 4 2错误处理技术 主要有以下几种方法1 返回中立值有时候错误处理的最佳方法就是继续执行操作并返回一个没有危害的数值 比如数值计算可以返回0 字符串可以返回空字符串 好像我们的SPF类 再比如一个绘图的功能 如果接收到一个错误的颜色可以使用默认颜色继续绘制 当然如果是癌症病人的X光片的绘图程序 还是不要现实某个 中立值 人家会找你拼命的 这时候关闭程序会比限时错误的病人数据要好 2 换用下一个正确的数据在处理数据流的时候返回下一个正确的数据即可 如果你在读取数据库时候发现一条数据已经损坏 可以继续读下去找到正确的记录位置 比如你以每秒100次的速度读取体温计的数据 那么如果某一次的数据读取错误 你只需要等待1 100然后继续读取即可 3 返回和上次相同的数据比如某些情况下你没有读取到数据 那么可以简单的返回前一次的结果 当然如果你在管理ATM机上操作 你可能就不希望返回上一个结果了 因为那可能是前一个用户的银行帐号 4 2错误处理技术 4 换用最接近的合法值比如体温计的数据定义在1 100之前 如果你获得数据小于0 你可以把他替换为0就是最接近的合法值 同样大于100就替换为100 生活中的例子就是倒车 倒车时速度表无法负的速度 所以直接显示0 5 把警告信息记录到日志文件中在检测到错误的时候你可以在日志文件中增加一条警告信息 然后继续执行 方便查询总结 比如系统日志 6 返回一个错误代码7 调用错误处理函数 对象优点是 集中处理 调用更简单缺点是耦合性太强 不容移植 如果出现安全问题容易被攻击 8 错误发生时显示出错误不要破坏界面的一致性 攻击者可能会利用这个找到漏洞 所以我们要求不能显示 net的黄页一样 4 2错误处理技术 9 用最妥当的方式在局部处理7 关闭 停止程序有些系统一旦检查到错误就会关闭 这通常是遇到比较严重或者安全攸关的功能上 比如windows的安全日志即使满了 也会正常工作 但你可以配置windows 让它在日志满的时候停止服务 在安全信息攸关的环境下中这样做是明智的 4 3异常处理 异常是把代码中的错误或者异常事件传递给调用方的特殊手段 如果在程序中遇到了意料之外的情况就可以抛出异常 异常要审慎明智的使用 下面给出一些异常上的建议 抛出异常 让其他部分去解决问题 只有在真正的异常才使用 不能到处try catch 不能用异常来推卸责任 尽量局部处理 不要在构造和析构函数中使用异常 5 正确的抽象级上使用异常6 异常信息应该包含详细的异常数据 便于解读 7 不要使try catch为空 一定要进行处理 也不能让try为空 所以说尽量建立集中的异常处理报告 规范化异常使用 甚至考虑不用异常 使用其他方法替换 5 使用条件语句 简单的if else格式使用if else虽然很简答 但是有很多细节应该注意 1 先写很正常很普通的分支 再写不寻常的分支好处 这样可以突出判断的主体部分 不至于让次要的部分混淆程序执行的过程 使程序易读 2 在分支中要特别注意相等的条件 确保其正确性使用 来的清晰 这样可能会犯在数组中类似的越界错误 5 1 if语句 3 把正常情况下执行的代码放在if后面 而不是防在else后面把想要在正常情况下执行的代码放在前面 这样可以使程序的功清晰易读 清楚地了解到程序究竟是做什么功能的 5 1 if语句 5 1 if语句 5 1 if语句 4 If后面的子句要有一个有意义的意思 可以省去else子句bad if SomeTest good if SomeTest elseDoSomething DoSomething 5 1 if语句 5 考虑else子句else子句尽量不要省略 以免发生没有考虑到的错误 除非在显而易见的情况下才可以省略 6 检查else子句的正确性检查的重点应该是程序的主要部分 即if部分 有可能的话 也要检查else部分7 检查是不是把if和else里的处理页反了这是个常见的错误 一定要注意小心避免 5 1 if语句 If elseif else链式操作下面给出关于if elseif else操作的一些建议1 用返回布尔值的函数来代替复杂的逻辑表达式如果判断的条件是复杂的表达式的话 程序既不易读 也不易修改 1 if语句 2 把最常见的情况放在最前面最常见的情况放在前面可以增加程序的可读性 使人阅读程序时提高效率 3 确保所有的路径都被覆盖在程序的最后再加上一个else 并且在这个判断里面使用断言或者给程序员显示警告 这里 出错的信息是给程序员看的 方便开发期间的调试工作 4 如果程序语言支持的话 使用别的机制来代替if elseif else结构可以使用case来代替 5 2 Case语句 Case语句是很常用的 在JavaC 语言里 使用switchcase机制 下面给出使用Case需要注意的一些地方使用效率最高的Case的组合的顺序如果Case的分支不是很多 安排他们的顺序就无关紧要 若分支太多的话 就很重要了 5 2 Case语句 1 以数字或者字母的顺序来安排如果这些分支的重要性差不多的话 就使用字母序或数字来标记他们 这样一可以易读 二可以很方便的找到该分支2 正常情况下的分支要放在最前面这样可以指示那些分支是正常的 哪些是不正常的 3 把访问频率高的分支放在前面 低的放在后面这样一可以增加可读性 使读者清楚看到哪个分支最为常用 同时 也提高了执行效率 加快索引 5 2 Case语句 使用Case语句的一些建议1 每一个Case里的操作都应该简单好处 短的代码清晰易读 增加可读性 如果代码很长的话 就把它们单独放在一个模块里 2 不要使用容易出错的变量来作为条件作为判断的变量应该简单 下面一个例子是以用户输入参数的第一个字母作为标志的 switch后面只能跟整型和字符型 这样很容易出错 如果非要那样做的话 就不应该使用if elseif else 然后把判断的语句写全 5 2 Case语句 5 2 Case语句 2 Case语句 3 尽量不要使用默认的分支来检查合法的分支如果没有使用default子句 而仅仅是在case里面做一些处理的话 这样可能会使程序以后维护起来比较麻烦 修改case语句很不方便 尽量不要使用default来做检查 而是采用多写case的方法 4 使用default子句来检查错误如果在程序中必须要有一个case后面的部分不会被执行 那么default里面就写上显示出错的代码 5 在每一case的最后别忘了写上break类似于C的语言都必须要写上break以便能跳得出来 如果不写的话就会跳到下一个case里面去 6 如果非要在程序中执行两个以上的case的内容 case嵌套if 的时候 一定要注释清楚 个人建议还是不要这样嵌套 还不如使用if elseif else 5 2 使用前的提示 在使用条件判断语句的时候 一定要检查是不是符合下面的要求If else语句 1 主体部分是不是在if语句中清晰的表达了 2 在检查等号条件是不是正确的 会不会发生越界错误 3 是不是缺少else子句 4 Else子句是不是正确的使用了 5 If和else中分别需要做的工作又没有混淆 6 正常情况下的处理应该由if来完成 是不是弄到else里了 5 3 使用前的提示 If elseif else结构需要注意的地方1 复杂的逻辑表达式是不是封装在单独的函数中 通过函数调用的方式来实现判断而不是直接写在if里面 2 是不是最常见的操作放在最前面 3 是不是所有的路径都覆盖了 4 是不是整个结构都按照合理的方式来执行 5 3 使用前的提示 SwitchCase语句1 是不是所有的case都按照有意义的顺序排列 2 是不是每个case里的操作都很简单 通过函数调用来实现 3 是不是合法的使用了default语句 4 Default语句后面是不是有处理错误和报告错误的代码 5 在cc java里是不是在每个case后面跟上break 6 控制循环 选择循环类型循环控制写循环简单的方法 从内到外 6 1选择循环类型 循环类型 大多数语言中你只能用到少数的几种循环计数循环 执行的次数是固定的条件循环 预先不知道会运行多少次 他会在每次迭代时检查 死循环 一旦启动就一直执行下去 知道死亡 你可能在心脏起搏器等嵌入式系统能找到 迭代循环 对容器类里的每个元素都执行一次操作比如foreach 6 1选择循环类型 什么时候用while循环如果你不知道循环的次数 那么用whileWhile也可以loop with exit循环 带退出的的循环 while true a if 符合退出条件 break 6 1选择循环类型 什么时候用for循环循环确切次数若是有中间中断的情况 或是靠条件退出 用while替代什么时候用foreach循环Foreach循环适用于对数组或者其他容器的各项元素进行操作 比如我们会使用foreach循环list中的数据Foreach 对象inlist对象 2循环控制 循环易犯的错误 忽略了与循环有关的变量或累加器初始化 不正确的嵌套 不正确的循环中断 忘记给循环变量一个增量或给错了增量 用不正确的循环指标访问数组元素 while inputFile EndOfFile moreDataAvailable blackbox 这个循环的终止的条件是什么 很明显要么inputFile EndOfFile 为真 要么moreDataAvailable为假 然后进入循环 2循环控制 进入循环只从一个地方进入循环 初始化代码紧放在循环前面 就近原则把相关代码放到一起 适当的情况下多使用for循环 条件都在循环头部 相对while还要修改底部更好维护 用while true 表示无限循环 在更合适while的时候不要用for for inputFile MoveToStart recordCount 0 inputFile EndOfFile recordCount inputFile GetRecord recordCount 并不是控制循环的 控制循环结束的是inputFile GetRecord 6 2循环控制 正确的使用方法recordCount 0 for inputFile MoveToStart inputFile EndOfFile inputFile GetRecord recordCount inputFile MoveToStart 对循环进行初始化 inputFile EndOfFile 检测循环是否已经终止 inputFile GetRecord 则是把循环推向终止 while做更清晰inputF

温馨提示

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

评论

0/150

提交评论