《代码大全2》读书笔记week4

Viarow Viarow     2022-10-29     605

关键词:

《代码大全2》第8章:防御式编程

        防御式编程的主要思想是子程序应该不因为非法的输入值被破坏,就好比开车时的防御式驾驶:你无法预估其他司机将会做什么,但你要采取措施保证当他人做出危险动作时自己不受伤害。防御式编程的核心其实是承认程序始终存在问题,需要不断地被完善。

       保护应用程序不受外部错误输入破坏的主要思路有三种:检查所有来源于外部的程序的值,检查子程序所有输入参数的值、决定如何处理错误的输入数据。然而防御式编码的最佳方式是一开始就不要在源码中引入错误,使用迭代式设计、写代码前先写测试用例等等,都有助于防止引入错误。

       以下根据书中内容简要介绍防御式编程应用到的主要方法:

       1.断言(assertion): 目前大部分的面向对象编程语言都支持断言操作。断言对于大型的复杂程序和或对可靠性要求极高的程序极其有用,可以帮助程序员快速地排查出程序里不匹配的接口和错误等。一般来说,应该用断言来注解并验证前条件和后条件,避免把需要执行的代码放到断言中;用错误处理代码来处理预期会出现的的状况,用断言来处理绝不应该发生的状况;对于复杂、生命周期很长、需要高健壮性的程序,应该先使用断言再处理错误。

       2.错误处理技术:针对不同的情景,作者介绍了以下错误处理技术:返回中立值(没有危害的数值)、换用下一个正确数据、返回与前次相同的数据、换用最接近的合法值、把警告信息记录到日志文件中、返回一个错误码、调用错误处理子程序或对象、显示出错信息、关闭程序等等。需要注意的是,以上这些错误都不是通用额。开发人员需要根据实际需求,具体来说健壮性和正确性哪个更迫切以及高层次设计的决策等等,来挑选合适额错误处理操作。

      3.异常:作者提醒读者不可以过度依赖异常,由于如何安全使用异常的传统和经验相对较少,所以作者建议程序员多考虑一下异常的替换方案。异常和断言类似,都是用来处理真正例外的情况,不能用异常来推卸可以在处理局部错误的责任。另外,使用异常时应注意:避免在构造函数中抛出异常、在适当的抽象层次抛出异常、把项目中对异常的使用标准化等等。

     4.隔栏barricade):隔栏是一种容损策略,和防火墙的原理类似,即把某些接口选为“安全区域”的边界,对于穿越安全区域边界的数据进行合法性校验,但数据非法时快速反应。隔栏的思想使得错误处理和断言有了更为清晰的区分,隔栏外部区域应该被假定为不安全的,故使用错误处理技术;隔栏内部应该使用断言,因为既然进入隔栏内部的数据已经是被清理过的,那错误肯定是存在于程序中若不是由外部输入所导致的。

     5.辅助调试代码:开发人员不必把产品版的限制强加在开发版上,开发期间在速度和资源上做出一点牺牲,添加辅助调试代码,实际上是大有裨益的;甚至可以使用进攻式编程,在开发阶段把可能出现的错误都挖掘出来并进行处理。当然,程序开发人员还需要在移除辅助调试代码上做好计划,用版本控制工具来管理开发版和产品版,还可以尝试编写自己的预处理器、使用调试存根等等。

     当然,物极必反,过度的防御式编程也会引起问题,包括增加程序的复杂度、在添加防御代码时引入新的错误,因此,开发人员应该做好对防御的需求有清晰的认识,因地制宜地调整进行防御式编程的优先级。在产品代码中保留多少防御代码,也是需要认真思考的。

 

   

 

 

   

读书笔记2-《代码大全2》

软工读书笔记2-《代码大全2》继上周阅读《人月神话》后对软工这门学科有了比较全面的认识,以及相关的一些管理规则等等,本周我打算开始看一些关于编程规则与技巧的书籍,于是我选择了这本《代码大全2》。这本书讲的... 查看详情

《代码大全2》读书笔记

...节太多了QWQ看得太快了完全记不住。第十四章组织直线型代码14.1必须有明确顺序的代码对于具有明显的顺序关系的代码,应该使用顺序结构。对于隐含的顺序关系,应该:去除不合理的依赖关系(如不应该在CalculateExpense里对某... 查看详情

《代码大全2》读书笔记

第十一章变量名的力量(续) 11.5标准前缀 标准前缀由UDT(用户自定义类型)缩写与语义前缀构成。 >UDT缩写用很短的、标准化的缩写表示对象和变量的类型,通常不会表示编程语言提供的预制数据类型。如,scr屏... 查看详情

读书笔记:codesample(代码大全)

...能设计清楚么?3.2类的设计3.3子程序3.4变量、类型3.5代码组织4.关于后续维护4.1关于重构4.2其他5.总结1.前言作为一个计算机科班出 查看详情

《代码大全》读书笔记

...的。我直接读了400页之后的,也做了后续的读书笔记。《代码大全》第二版确实是一本好书,每个人读了能领悟的东西并不一样,本读书笔记是博主略有领会的东西,分享出来是希望没读此书的人有所收获,要是能引起你对《代... 查看详情

[读书笔记-代码大全]前言

...完一本书的经历了。俗话说:读书,要先把书读厚。像《代码大全》这样“重”量级的计算机读物,900多页的个头,我的天啊!如果想把它放在书包里作为“口袋书”,以方便随时随地拿出来阅读,的确是个愚蠢的做法;但如果... 查看详情

《代码大全》读书笔记——第九周

正如这本书的书名,这本书大而全,涉及到了软件开发的方方面面。这里简单记录一下读书的收获和自己的感悟。一.前期开发 需求第一由于需求是首先进行的活动,所以需求阶段引入的缺陷可能在系统中潜伏的时间最长,... 查看详情

《代码大全》读书笔记(上)

  对于书中提到的一点印象最为深刻,其实在《人月神话》也有提到,那就是:  软件设计与开发的核心就在于控制复杂度  这句话的核心其实包括几个问题:  软件开发的本质问题性难题是复杂度?  如何可以一定程序... 查看详情

javascriptjqueryhtml5node.js实例大全-读书笔记3

...本书是【JavaScript实战----JavaScript、jQuery、HTML5、Node.js实例大全】JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记23.3响应鼠标动作图3-2的效果已经有了,须要鼠标来操作展示想看的照片。这就须要在对应的地方加上事件。3.3.1响应... 查看详情

[读书笔记-代码大全]第1章欢迎进入软件构建的世界

“构建”既是名词,也是动词,但在现实生活中,最好不要把它当作形容词,比方说“您真‘构建’的”。(Sorry,忍不住又在扯了–_-#)我对本章内容的概括是:在软件开发过程中,构建活动是一个程序员最最应该关注的活动... 查看详情

读书笔记week42018-3-29

...思路,但当我真正上手开始编程的时候,却几乎每写一行代码,就被卡住了,消耗了大量的时间在百度/谷歌/CSDN去寻找相关语句的用法。  &n 查看详情

读书笔记:codesample(代码大全)

...能设计清楚么?3.2类的设计3.3子程序3.4变量、类型3.5代码组织4.关于后续维护4.1关于重构4.2其他5.总结1.前言作为一个计算机科班出身的程序员,上学期间还是学了挺多的编程课,并且在找工作的时候,也刷了不少... 查看详情

《effectiveobjective-c2.0》读书/实战笔记三(代码片段)

《EffectiveObjective-C2.0》读书/实战笔记三《EffectiveObjective-C2.0》读书/实战笔记一《EffectiveObjective-C2.0》读书/实战笔记二第6章:块与大中枢派发第37条:理解“块”这一概念块是C、C++、Objective-C中的语法闭包块可接受参... 查看详情

retrivalandclustering:week4gmm&em笔记(代码片段)

华盛顿大学机器学习笔记。 k-means的局限性  k-means是一种硬分类(hardassignment)方法,例如对于文档分类问题,k-means会精确地指定某一文档归类到某一个主题,但很多时候硬分类并不能完全描述这个文档的性质,这个文档... 查看详情

javascriptjqueryhtml5node.js实例大全-读书笔记1

...本书是【JavaScript实战----JavaScript、jQuery、HTML5、Node.js实例大全】第3章用JavaScript实现的照片展示构建软件设计的方法有两种:一种是把软件做得非常easy以至于明显找不到缺陷。还有一种是把它做得非常复杂以至于找不到明显的缺... 查看详情

deeplearning.ai卷积神经网络week4听课笔记

本周课程的主题是两大应用:人脸检测和风格迁移。 1.Faceverificationvs.facerecognition  Verification:一对一的问题。    1)输入:image,name/ID.    2)输出:image是否对应这个name/ID。  Recognition:一对多的问题。    1)数... 查看详情

[重构]读书笔记

如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地达成目的,那就先重构那个程序,使特性的添加比较容易进行,然后再添加特性。没个傻瓜都能够写出计算机能够理解的代码,但是唯有写出人类能够理解... 查看详情

theartofmultipropcessorprogramming读书笔记-硬件基础2(代码片段)

...#xff0c;在原版图书的基础上,结合OpenJDK11以上的版本的代码进行理解和实现。并根据个人的查资料以及理解的经历,给各位想更深入理解的人分享一些个人的资料硬件基础处理器和线程(processorsandthreads)多处理器&... 查看详情