Pet*_*ter 8 design-by-contract
合同编程设计的最佳实践是什么?
在大学时我通过合同范式学习了设计(在OO环境中)我们已经学会了三种解决问题的方法:
1)总编程:涵盖所有可能的例外情况(参见数学)
2)名义编程:只有在满足前提条件时"承诺"正确的效果.(否则效果未定义)
3)防御性编程:使用异常来发出非法调用方法的信号
现在,我们已经集中在不同的OO场景中正确使用每种情况,但是我们还没有学会何时使用WHICH ...(主要是练习所强加的战术......)
现在我觉得我没有问过我的老师是非常奇怪的(但是在演讲期间,没有人问过)
就个人而言,我现在从不使用名义,并倾向于用异常替换前置条件(所以我宁愿使用:抛出IllegalDivisionByZero,而不是说'前提条件:分隔符应该与零不同)并且只有程序总数才有意义(因此我不会返回除以零的常规值,但这种方法只是基于个人发现和喜欢.
所以我问你们:
有没有最好的做法?
我不知道这个部门,它并没有真正反映我的经验.
总编程实际上是不可能的.您不能保证涵盖所有特殊情况.所以基本上你应该限制范围并拒绝超出范围的情况(这是前提条件的作用)
不需要标称编程.应禁止未定义的效果.
防守编程是必须的.您应始终发出非法调用方法的信号.
我赞成实施完整的"按合同设计"元素,在我看来,这是一个实用且有用的全程编程版本
先决条件(一种防御性编程)来发出非法调用方法的信号.尝试尽可能地限制范围,以便简化代码.如果可能的话,通过缩小范围来避免复杂的实现.
如果未获得所需效果,则后置条件引发错误.即使你的错,你应该通知来电者你错过了你的目标.
不变量以检查是否保留了对象一致性.