知识卡片

按契约设计的三种断言

普通读书笔记卡 · 1942.i

内容

按契约设计用断言(不应为假的布尔陈述,为假只因bug)精确划分接口责任,核心三种断言:前置条件(执行前世界应满足的条件,如求平方根要求input≥0)明确调用者的检查责任;后置条件(执行后世界应变成的样子,如input等于result乘result)说明操作承诺做什么而非怎么做;不变式(关于类本身任何时候都应为真的断言)约束实例状态一致性。三者共同把谁负责检查什么写清楚,避免漏检或重复检查。

参考来源

- 位置:《UML精粹:标准对象建模语言简明指南(第3版)》第3章《类图:基础》(源文件:_epub-src/EPUB/2.xhtml) - 结论依据:原文定义断言"是一条决不应该为假的布尔陈述,因此,为假的唯一原因是存在bug",并分别给出前置条件("求平方根"要求input>=0)、后置条件(input=result*result)、不变式(balance==sum(entries.amount()))的定义与例子,说明各自划分了不同的责任。 - 原始内容:断言(assertion)是一条决不应该为假的布尔陈述……前置条件(pre-condition)陈述我们期望在执行操作前世界是什么样子……后置条件(post-condition)陈述操作执行后世界看起来应该像什么样子……不变式(invariant)是关于类的断言……对于类的所有实例来说,这个不变式"总是"为真。