ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
#### [使用断言进行契约式设计](https://lingcoder.gitee.io/onjava8/#/book/16-Validating-Your-Code?id=%e4%bd%bf%e7%94%a8%e6%96%ad%e8%a8%80%e8%bf%9b%e8%a1%8c%e5%a5%91%e7%ba%a6%e5%bc%8f%e8%ae%be%e8%ae%a1) *契约式设计(DbC)\*是 Eiffel 语言的发明者 Bertrand Meyer 提出的一个概念,通过确保对象遵循某些规则来帮助创建健壮的程序。这些规则是由正在解决的问题的性质决定的,这超出了编译器可以验证的范围。虽然断言没有直接实现 \**DBC\*\*(Eiffel 语言也是如此),但是它们创建了一种非正式的 DbC 编程风格。DbC 假定服务供应者与该服务的消费者或客户之间存在明确指定的契约。在面向对象编程中,服务通常由对象提供,对象的边界 — 供应者和消费者之间的划分 — 是对象类的接口。当客户端调用特定的公共方法时,它们希望该调用具有特定的行为:对象状态改变,以及一个可预测的返回值。 **Meyer**认为: 1.应该明确指定行为,就好像它是一个契约一样。 2.通过实现某些运行时检查来保证这种行为,他将这些检查称为前置条件、后置条件和不变项。 不管你是否同意,第一条总是对的,在大多数情况下,DbC 确实是一种有用的方法。(我认为,与任何解决方案一样,它的有用性也有界限。但如果你知道这些界限,你就知道什么时候去尝试。)尤其是,设计过程中一个有价值的部分是特定类 DbC 约束的表达式;如果无法指定约束,则你可能对要构建的内容了解得不够。