最近在复习软构,ADT是比较重点的内容,在这里整理一下,希望对看到的人有帮助。
说到ADT,主要内容就是AF和RI,想要弄清楚AF与RI,首先需要一些前置知识,然后解释一下AF和RI到底是什么,最后说明AF和RI的用法。
一、前置知识
1.针对操作的划分
我们可以针对操作将代码进行划分:
构造器:可以实现为构造函数或静态函数,没有返回值,是类直接调用的,可以用“从无到有”来概括。
生产器:根据构造器已经构造出来的东西,产生新的东西。可以理解为“从有到新”。
观察器:就是只对类中的属性进行观察,而不去改变。比如String中的size方法,只查看字符的数量,而不改变String。
变值器:仅存在于mutable类型中,就是改变值的部分。
2.设计ADT
需要满足以下三点:
1.设计简洁,操作一致。操作行为应该是内聚的。
2.对象每个需要被访问的属性都应该能够访问到,要最易支持cilent的需求。
3.要么抽象,要么具体,不要抽象与具体混合。
3.规约、表示与实现
规约:就是代码中说明功能的注释部分。
表示:类中构建变量部分的代码,也是这个类的基本属性。
实现:具体的操作函数。
二、RI与AF概念
RI是表示不变量,AF是不变量函数。实现者看到和使用的值叫表示值,构成的空间叫做R空间;cilent看到和使用的值叫抽象值,构成的空间叫做A空间。R对于A是有映射关系的,R对于A一定是满射,但未必是单射,也未必是双射。其中R到A的这种映射关系就叫做AF(不变量函数)。R空间中可能会有一些值映射不到A空间,这些可以映射到A空间的值叫做RI(表示不变量)。
三、AF和RI的用法
1.如何确定AF与RI
同样的R空间可能会有不同的RI,同样的R空间,同样的RI,可能会有不同的AF。所以要根据规约来确定AF和RI 是什么样的。
2.RI与AF的用途
就是用来设计ADT,步骤如下:
1.选择R和A
2.RI——合法表示值
3.如何解释合法表示值——映射AF