Abstraction Functions
先理解不变量 Invariants:
不变量:程序在任何时间总是true的性质。一旦创建,不变性对象在其整个生命周期中都应始终代表相同的值。
Immutability就是一个典型的不变量。
为什么需要不变量?
①当ADT保留自己的不变量时,对代码的推理就变得容易得多。
有String不会改变的事实,那么可以在调试使用String的代码时或尝试为使用String的另一个ADT建立不变量时排除这种可能性。将其与可变的字符串类型进行对比,该可变的字符串类型可以由任何有权访问它的代码进行突变。要推断出涉及可变字符串的错误或不变式,您必须检查代码中可能使用该字符串的所有位置。
②如果没有这个不变量,那么在所有使用String的地方,都要检查其是否发生了改变。
另一个概念是表示泄露:
表示泄露:不仅影响不变量,也影响力独立性:无法在不影响客户端的情况下改变其内部表示。