软件构造——不变量相关知识点

immutable的ADT具有不少特性。

表示独立性:

client使用ADT无需考虑其内部如何实现,ADT内部表示的变化不应影响外部spec和客户端,除非ADT的操作指明了具体的前置条件和后置条件,否则不能改变ADT的内部表示。

表示泄露:

不仅影响不变性,也影响了表示独立性,无法在不影响客户端的情况下改变其内部表示。最好的办法:使用immutable的类型并且将其声明为(privat final),彻底避免表示泄露,此外还可以使用防御式拷贝。

不变量、表示不变量RI:

由ADT来负责其不变量,与client端的任何行为无关。

RI:R→boolean,某个具体的表示是否是合法的,是所有表示值的一个子集,也包含了所有合法的表示值,一个条件,描述了什么是合法的表示值:

表示空间、抽象空间AF:

软件构造——不变量相关知识点

ADT开发者关注表示空间R,client关注抽象空间A。

抽象函数:R和A之间映射关系的函数,即如何去解释R中的每一个值为A中的每一个值。

AF:满射,非单射,未必双射,可知R中的部分值并非合法,在A中无映射。

即使是同样的R,同样的RI,也可能有不同的AF,即解释不同。

例如:

软件构造——不变量相关知识点

随时检查RI是否满足:在所有可能改变rep的方法内部都要检查。

Observer方法可以不用,但建议也要,防止万一。

要精确记录RI:rep中的所有fileds何为有效。

要精确记录AF:如何解释每一个R值。

上一篇:为整数定义一个抽象数据类型(使用ADT)


下一篇:哈工大软件构造 第三次实验报告