130.合约设计

从类和子类的名称来看,似乎子类是类的一个分支或者特例。

今天看到一篇文章,正方形是矩形的一个特例,矩形有两个属性,长和高。可当这个特性应用到矩形的子类,也就是正方形上时,可能会导致错误。

原因是矩形可以改变独自改变长或高,可当这个特性应用到正方形上时,则正方形不再是正方形。

矩形的长和高分别改变并没有错,错就在于里面有隐含的假设,正方形除了长等于高,就没有其它约束了。

这就引出了合约设计,不管是条件还是隐含的假定,都使用明确的语言定义,并写进文档,甚至在有的语言中,这已经被明确地写进了程序。

例如python中的finally,世界上就是合约设计的一种。

合约设计有三个部分,前置条件、后置条件和不变项。

前置条件必须为真,才会执行程序。程序结束时,后置条件也必须为真,要不就会出现异常。

这两点都比较好理解,例如对两个正整数求和,前置条件是必须输入两个正整数,而不是负数或者浮点小数;后置条件是得到那两个数的和,而且类型也是正整数。

当然关于参数的类型和值应该由谁来改变,也有了答案,也就是调用者负责格式化数据。

比较难理解的是不变项,按照作者的说法,这应该是在程序执行过程中,用户能察觉的阶段,一直为真的条件。比较抽象,也并没有说的很清楚。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容