今天在课堂上学习了类的不变式这个概念。教材上的原文是Invariant Properties。解释比较模糊,翻译过来是这样:
类的一个不变量是类的一个性质。对于这个类的每个对象,这个不变量都为“真”。
这个模糊的解释让我非常费解,就上网搜索中文解释,发现更加模棱两可。但是接着往下学的时候渐渐地开始理解了这个概念的含义。其实这个概念非常抽象,现在网络上的解释都不是很准确。
首先,我们都很熟悉Exception异常在Java中的使用。教材中有几句话意思大概如下:
- 会存在一些情况,使我们类中的方法无法保护不变量,从而产生失败。那么我们要如何报告这种失败呢?
- 方法一:返回一个特殊的、代表错误的值。
- 方法二:抛出一个异常。
这样看来,似乎我们很常见的run-time error的产生和“无法保护不变量”的情况非常有关?
接下来的一个例子则解释的更加清楚:
假设我们有一个
Person
类,又有一个ListOfPeron
类。后者包含一个定长的Person
集合。
ListOfPerson
有向集合中增加Person
对象的add
方法,也有一个删除Person
对象的sub
方法。
很明显,当我们用add
向ListOfPerson
对象中加入过多Person
时,会发生失败。
很明显,