本周内容较少,主要介绍了断言以及防御式编程。断言一般用于程序开发阶段,用以快速发现错误,而在程序正式版本中则较少使用断言。一般来说,程序员使用(输入)的数据可以使用断言检测合法性,而用户输入数据则采用异常的机制处理。防御式编程可以提高程序的健壮性,然而也要避免“过度防御”带来的程序性能下降的负面影响。

断言

1.断言用以保证程序正确性;异常用以保证程序健壮性。
2.断言只是检查程序的内部状态是否符合规约(检查程序员自己的错误),一旦出现false程序就停止。但是代码无法保证不出现外部错误,处理外部错误需要使用异常。
3.断言非常影响程序性能,正式版本的程序一般不应出现断言。
4.使用异常处理“预料到可以发生的”不正常情况;使用断言处理“绝不该发生”的情况。
5.一般,前置条件使用异常检测,后置条件使用断言检测。
如果参数来自于外部,不受自己控制(比如public方法),使用异常;如果来自于内部(比如private方法),使用断言。
6.断言和异常都可以处理同样的错误。

防御式编程的措施

1.防止错误输入
-错误输入,无输出
-错误输入,提示错误信息
-不允许错误输入
2.设置路障
使用特定的类过滤错误输入。public方法收到的外部数据都应被处理后再传入private方法。类似于代理模式。

有关Debug

1.debug是测试的后续步骤,测试发现问题,debug消除问题。
2.debug的过程:重现->诊断->修复->反思

软件构造学习笔记-第十三周相关推荐

  1. 软件构造学习笔记-第八周

    本周重点是Liskov可替换原则.它要求父类和子类的行为一致性,子类要有更强的不变量.更弱的前置条件.更强的后置条件.在该原则的要求下,每个子类都可以对父类进行替换.这在开发过程中会带来极大的便利,在 ...

  2. 软件构造学习笔记-第三周

    本周介绍了软件开发的几种模型,并重点介绍了Git.Git是分布式版本控制系统,可以通过SSH key建立远程与本地的连接,通过Git Bash中的命令进行文件的上传和下载.对于这门课程,Git的主要作 ...

  3. 软件构造学习笔记-第十一周

    本周的内容是,比较各个设计模式的区别和联系,并介绍了状态模式和备忘录模式,以及正则表达式.正则表达式用于对文本文件的处理.在实验3中有一项要求是对输入文本进行解析,构造航班.要求表达式不仅要读入合法数 ...

  4. 软件构造学习笔记-第六周

    这周的重点是重载和重写.重载要求两方法的签名必须不同,而重写则要求两方法的签名必须相同.重载可以发生在同一个类中,也可以发生在父类和子类中:重写必须发生在父类和子类中.接口/抽象类不具有构造方法,只有 ...

  5. 软件构造学习笔记-第五周

    本周讲了AF.RI.Safety from rep exposure.spec等概念.这些是辅助程序设计的重要部分,需要在代码中以注释的形式体现,可以显著提高代码可读性,明确设计的目的.必须要养成写的 ...

  6. 软件构造学习笔记-第七周

    本周只有一节课,内容较少.对于不可变类型的相等比较,需要重写equals和hashCode方法,实现观察等价性.对于可变类型,不建议重写以上两方法,按照默认比较方式(比较内存地址)即可. 可变类型的相 ...

  7. 软件构造学习笔记-第九周、第十周

    因为本周五开始五一假期,所以只有一节软件构造课.因为内容还属于创建模式.结构模式.行为模式.将该堂课的内容整合到本博客中.本周的重点是程序开发模式,在写代码之前首先充分考虑采用哪种模式更有利于开发.维 ...

  8. 软件构造学习笔记(九)面向复用的软件构造技术

    目录链接 Part I What is Software Reuse? Part II How to measure "reusability"? Part III Levels ...

  9. 软件构造学习笔记ATD

    在面向对象的编程中,ADT的编写十分重要,与传统的c语言不同,面向对象的编程更加商业化一点,所以保密需要做好,有点商业机密的感觉.如何设计良好的抽象数据结构,通过封装来避免客户端获取数据的内部表示,避 ...

最新文章

  1. Python+Django+Eclipse 在Windows快速Blog
  2. 单片机模块学习之键盘
  3. 企服创业必修课丨神策数据与红杉中国联合发布规模化营销获客体系建设指南...
  4. python默认参数不能定义为可变对象类型
  5. 两道挺有意思的思考题
  6. python+flask搭建CNN在线识别手写中文网站
  7. hiveserver2启动不起来_125踏板车电启动发不着时,为什么很少用户使用脚启动?...
  8. java编译异常有哪些_java编译时异常有哪些?java常见异常有哪些?
  9. ps html插件初始化失败,解决PSCC2019无法安装扩展插件怎么办?
  10. Linux ubuntu 串口调试工具
  11. Calibre Web 中阅读 epub 电子书时的夜间模式解决方案
  12. geek_How-To Geek正在寻找远程全职技术作家
  13. 图像处理与计算机视觉:基础,经典以及最近发展(转)
  14. 《自拍教程44》Python adb一键截取Logcat日志
  15. Linux帮助使用方法
  16. 蓝桥杯:试题 算法训练 采油区域 矩阵前缀和+动态规划+分治+枚举
  17. 从go语言中找和*区别
  18. 表单验证:文字输入不超过8个汉字或者16个字符
  19. linux can总线接收数据串口打包上传_使用Zedboard开发板学习Linux的移植及驱动开发...
  20. 中文与acsii码相互转换方法

热门文章

  1. WIN10 查看已经连接的wifi的密码
  2. “Visual Studio 启动不能打开上次打开的文件” 最正确的解决姿势
  3. 【遥感数字图像处理教程】理论基础知识目录(5章全)
  4. ArcGIS实验教程——实验十三:栅格空间插值分析
  5. C语言试题十六之写删除字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。
  6. Android之解决PC浏览器上传表单文件到手机服务器read数据错误导致有时候下载到手机的文件打开文字错乱问题
  7. AndroidStudio自定义属性xmlns无法识别问题解决in Gradle projects,always use http://schemas.android.com/apk/res-auto
  8. 《iVX 高仿美团APP制作移动端完整项目》01 标题需求分析思路及制作流程
  9. 《看聊天记录都学不会C语言?太菜了吧》(14)这么神奇?我写了20行代码竟然一行就可以搞定?
  10. 【C语言简单说】二十:指针基础