这周的课程学了ADT,也就是抽象数据类型,老实说刚学这个确实很懵,因为这个将我们之前的编程方式完全颠覆了,首先放一个图,来表示一下ADT的大体框架。
这里说明了一种新的编程思想,首先呢ADT是什么,说白了就是一个接口,里面放着spec但是没有任何的代码实现细节,只有一些功能的描述,在客户看到你的ADT的时候,他只会看到你的spec看不到你是如何实现的,这个就很好的体现了封闭性。而这些功能,说白了就是一些方法,主要分成四类:creator、producer、observer、mutator。而他们的具体实现呢,要靠下面的类来实现,也就是术语中的Rep和implementation。前者说白了就是属性(数据结构),而后者说白了就是方法(算法)。这个类中就要写出你的具体实现了,当然实现一个接口可以使用不同的数据结构,比如图,你可以底层使用数组或者链表,有多少个都可以,但是要确实的实现接口中的spec。这些呢,就是ADT的一个大体框架。
当然呢,这其中有一些必须要知道的概念,就比如上图中R和A。
A是用户提出的一个抽象空间。而R是你的数据结构表示抽象空间的一个表示空间。
这个映射必须是满射的,这里需要说明两个概念,RI和AF。
RI:是你的数据结构集合中的合法集合。而RI要求变化前后依旧合法。
AF:是从你的表示空间向抽象空间的一种映射。
也就是说你的实现用户功能的过程是:R---RI---AF---A
下面是一个例子:
最后一个概念就是数据泄露的安全声明,这个从字面上就比较好理解,就是一个自证清白的过程,说明一下我这个属性啊用的是private,我的数据类型啊是不可变的等等。
以上就是我对ADT的理解,也初步明白了软件构造的真正意思。