契约式设计
/ / 点击 / 阅读耗时 3 分钟什么是契约式设计
在编写一个方法时,我们常常会在方法的入口处增加许多判断,从某种意义上来说,这就是一种最朴素的契约式设计。契约式设计(DbC)核心就是“规范与检查”。其主要由以下三个方面构成:
- 前置条件:调用方法之前需要满足的条件
- 后置条件:方法顺利执行完成之后需要满足的条件
- invariant:该类的实例调用任何方法时都必须为真的条件
简单的逻辑关系是:用户在调用方法之前,确保其参数满足一定的条件,类负责确保用户获得其想要的结果。此处参数需要满足的条件分两种情况:
- 创建一个类的实例。在此过程中,只需要确保前置条件满足;
- 调用一个已经存在的实例的方法。需要确保前置条件以及invariant同时满足。
DbC与继承的关系
DbC与断言的不同?
个人认为可以通过断言实现DbC,但是两者绝对不是等同的概念。DbC是可以继承的,而断言无法继承。
如果一个基类拥有前置条件p0
,后置条件q0
,那么其子类的前置条件以及后置条件应该满足什么样的性质?
- 继承之后的前置条件只能保持不变或者弱化;
- 继承之后的后置条件只能不变或者增强。
感谢阅读!欢迎评论嗷~