关于表示不变量(Rep invariant)和抽象函数(Abstraction function)

关于表示不变量(Rep invariant)和抽象函数(Abstraction function)

(1) 表示空间R:实际实现中内部表示的值

一般情况下ADT的表示比较简单,有些时候需要复杂表示,

抽象空间A:client看到和使用的值

ADT实现者关注R,而用户关注A

因此,我们在R和A可建立一个映射:

这种映射一定是满射(surjective),而不一定是单射(not injective)

(2) 抽象函数:即R和A之间映射关系的函数

(3) 在表示的过程中,就出现了表示不变性RI:

即某个具体的“表示”是否是“合法的”

也可将RI看作:所有表示值的一个子集,包含了所有合法的表示值

也可将RI看作:一个条件,描述了什么是“合法”的表示值

举例:charSet(字符集合)的RI和AF

在这里插入图片描述

其为满射,非单射,更非双射

(4)AF和RI与内部表示的设计息息相关,不同的内部标识,需要设计不同的AF和RI:

选择某种特定的表示方式R -> 进而制定某个子集是“合法的”(RI)

-> 并为该子集中的每个值做出“解释”(AF)-即如何映射到抽象空间中的值

(5)同一种表示可能有不同的RI,进而有不同的AF

(6)即使同一种R,同样的RI,也可能有不同的AF,即“解释不同”

(7)随时检查RI是否满足:

自写checkRep()方法,在创造和改变表示的方法中(creators,producers, mutators),进行调用。 Observers正常来说不需调用checkRep(),但这是一种好的防御性措施。

总结一下就是:AF就是你的ADT里面的量到外部人员想要操作的量的映射,
就比如,中国的香蕉就是美国的banana,这个意思。
RI就是控制着你的数据不变性的,比如保证你的banana必须是一根香蕉,而不是许多香蕉。因为bananas才代表许多香蕉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值