今天黎叔问了一个问题:
不变式和后置条件有什么区别?
就喜欢老板这样喜欢思考的,没有思考就没有理解,一起来看定义:
前置条件:为调用这个例程,必须为真的是什么?例程的需求。一个例程永远
不应该在前置条件被违反的时候被调用。传递良好的数据是调用者的责任。后置条件:例程保证要做的是什么?例程完成时世界的状态。例程有后置条件这个事实,意味着能得出这样的结论——不允许无限循环。
类的不变式:从调用者的角度来看,类会确保该条件始终为真。在例程的内部处理期间,可以不遵守不变式,但是当例程退出并将控制权返回给调用者时,不变式必须为真。(注意,一个类不能给参与不变式的任何数据成员不受限制的写访问权限。)
仔细又看了一遍,感觉确实和后置条件的区别不大,如果硬要说区别,后置条件侧重的是契约要实现的目的或功能,不变式侧重的是契约不能产生的副作用(某些条件不能更改)
再来看一个包含不变式的定义:
一定不要把固定的、不可违背的需求,与那些仅仅可能是随着新管理层上任而改变的策略相混淆。这就是我们使用语义不变式这个术语的原因——它必须是事物意义的核心,而不受策略的影响(策略用于更动
态的业务规则)。
感觉不变式侧重的是不可违背的需求,而后置条件更像是会时间变化的业务规则。以POS机上的查询余额为例,不变式是指用户不管怎么查询,账户里面的钱不会增加也不会减少,这是不可违背的需求。
而账号余额要以什么样的形式展现出来就更像是后置条件了,当然我们也可以说不变式是一种特殊的后置条件,只是侧重点不同罢了。
网友评论