在第六讲中老师讲解了与Rep Invariant 和Abstraction Function相关的知识。在之前的实验过程中这部分就一直做的马马虎虎,始终没有完全理解。代码里的AF和RI写的也很不规范。这次期末复习正好回顾一遍这部分知识。
首先,在开发过程中,会存在两个数据空间。一个是R空间: the space of representation values,即表示空间。另一个是A空间: the space of abstract values,即抽象空间。我们程序员需要着重关注表示空间,因为这与我们ADT的实现方式有关。用户则关注抽象空间,因为这是他们需要使用并且唯一能够接触到的地方。
即使R空间是相同的,RI也可能不同。如下图。
一个RI表示R空间中所有无重复字符的字符串,另一个RI表示R空间中所有字符按照ASCII值递增排列的字符串。
可是即使R,RI都相同,AF不同也会产生不同的映射关系。
下面我们来看几个AF和RI的例子,我们可以学习他们的格式,以期未来自己撰写。
可以是文字描述性的。
还可以像下面这种利用映射函数表示AF的。这种很自然,我个人偏向这种。
还有复杂一些的。