- 理解待决定(underdetermined)规格说明,并能够辨别评估待决定的规格说明。
- 理解声明性的规格说明和操作性的规格说明之间的区别,并能够写出声明性的规格说明。
- 理解前置条件、后置条件、及规格说明的“强度”,并能够比较两个规格说明之间的强度。
- 能够写出逻辑严密、前后连贯的规格说明。
- 不变量(invariants)
- 表示暴露(representation exposure)
- 抽象函数(abstraction functions)
- 表示不变量(representation invariants)
不变量
回想我们之前讨论过的关于ADT的内容,什么设计会产生好的ADT?其中最重要的一点就是它会保护/保留自己的不变量。 不变量是一种属性,它在程序运行的时候总是一种状态,而不变性就是其中的一种:一旦一个不变类型的对象被创建,它总是代表一个不变的值。当一个ADT能够确保它内部的不变量恒定不变(不受使用者/外部影响),我们就说这个ADT保护/保留自己的不变量.
当一个ADT保护/保留自己的不变量时,对代码的分析会变得更简单。例如,你能够依赖字符串不变性的特点,在分析的时候跳过那些关于字符串的代码;或者当你尝试基于字符串建立其他的不变量的时候,也会变得更简单。与此相对,对于可变的对象,你将不得不对每一处使用它的代码处进行审查。
可变类型的不可变包装
Java的c