博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Code Complete》ch.8 防御式编程
阅读量:5333 次
发布时间:2019-06-15

本文共 651 字,大约阅读时间需要 2 分钟。

WHAT?

主要思想:子程序不应因传入参数错误而被破坏

WHY?

保护程序免遭非法输入的破坏

HOW?

断言

assert denominator != 0 : "denominator should not be 0"; // 启动VM时需要 -ea 参数用以启动assert功能

 

 

  • 只用于开发、维护阶段
  • 用错误处理代码来处理预期会发生的状况,用断言来处理绝不会发生的状况
  • 避免把需要执行的代码放入断言中
  • 用断言来注解并验证前条件和后条件

错误处理技术

  • 返回中立值(当对返回结果准确性要求较低的时候)
  • 换用下一次正确的数据
  • 返回与前次相同的数据
  • 换用最接近的合法值
  • 记录日志
  • 返回错误码
    • 设置一个状态参数的值
    • 返回一个状态值
    • 使用语言内建的异常机制抛出一个异常
  • 关闭程序

健壮性与正确性

处理错误最恰当的方式要根据软件类别来确定

  • 健壮性(robustness):消费类应用软件
  • 正确性(correctness):关乎人身安全的软件

异常机制

  • 用异常通知程序的其它部分,发生了不可忽略的错误
  • 只在真正例外的情况下才抛出异常
  • 不能用异常来推卸责任,能在局部处理的错误就不要抛出
  • 避免在构造函数和析构函数中抛出异常
  • 在恰当的抽象层次抛出异常,确保异常的抽象层次和接口的抽象层次是一致的
  • 考虑集中的异常报告机制
  • 异常需要包含关于异常发生的所有背景信息

隔离程序

  • 公有方法假设数据不安全
  • 私有方法假设数据安全

转载于:https://www.cnblogs.com/maozhige/p/3794764.html

你可能感兴趣的文章
Neutron:LBaaS v2
查看>>
Java MD5加密类
查看>>
获取用户地理位置
查看>>
javascript事件流的原理
查看>>
网页中屏蔽鼠标右键
查看>>
Java线程
查看>>
Http协议
查看>>
LeetCode -- Ugly Number
查看>>
jquery中prop()方法和attr()方法的区别
查看>>
在windows上使用symfony创建简易的CMS系统(二)
查看>>
2019年7月23日 组合
查看>>
JS组件系列——图片切换特效:简易抽奖系统
查看>>
并发编程——多线程
查看>>
配置 Ubuntu 服务器
查看>>
安装openldap
查看>>
union all 和 union 的 区别
查看>>
快速输入(简单版)
查看>>
适配的js
查看>>
Win7开启SNMP服务
查看>>
godaddy域名使用DNSPod做DNS解析图文教程
查看>>