今天为大家带来的是第三部分的论述——断言和防御性编程,希望与君共进步
设计一个ADT
- 防御方式
- 静态检查,动态检查,不可变性,等来保证消除bug
- 让bug 局部化,只影响一个局部范围
what and why 断言
- Assert 断言失败会抛出 断言异常
- 断言优于if else
- 1.对程序的假设起到适当的文档作用
- 在实际运行时不会带来性能问题(实际运行时断言可被禁止)
- 什么时候用断言
- 内部不变量
- 类的不变量
- 控制流程不变量
- 方法的 pre 条件
- 方法的 post 条件(断言可以检查是否实现了)
- 使用异常
- 在开发和调试阶段使用断言,帮助发现错误和异常
- 在发布时候可以禁用断言,避免影响性能
- 断言不是免费的,慎用
- 不要用断言测试外部的条件
- 断言是可以打开关闭的
使用断言的指导
- 异常和断言的对比
- 用异常处理技术来处理你可以遇见的情况
- 用断言来处理绝对不该发生的情况;断言的方式处理一定是发生了错误
- 不要把业务逻辑(执行代码)放到断言里面去处理
- 防御式编程
- 保证程序在不可预见情况下继续执行
- 最大程度的怀疑别人
- 技术
- 对无效的输入过程进行保护
- 断言
- 异常
- 具体的错误解决技术
- barricade隔栏、防火墙
- 容损策略,外边随便错误,内部的东西一定是正确的
- 外部都是公共方法,假设数据不安全,负责检查和清洗,私有方法认为接受后的数据是安全的
- debugging aids
- 辅助调试代码
- 使用攻击性编程(offensive),在开发阶段让处理异常显现出来,在产品运行时候能够自我恢复。
- 隔栏和断言的关系
- 隔栏外部的东西能处理就处理,处理不了就抛出异常
- 内部使用断言查看是不是自己代码的问题(这儿去看ppt 不知道对不对 7.3)