软件构造笔记一:RI与AF

笔记

软件构造课程Chapter 6 Abstract Data Type (ADT)中的第5节为Representation Independence,译为“表示独立性”。该节提出了一些概念如RI、AF、Rep等,在学习过程中觉得理解的不够深刻,所以决定重写一下各个概念以及认识过程以加深理解。

基本概念

以PPT为依据整理一下主要概念:
表示独立性(Representation independent):client使用ADT时无需考虑其内部如何实现,ADT内部的变化不应影响外部spec和客户端。
表示域(R):包含的是值具体的实现实体的空间。一般情况下ADT的表示比较简单,有些时候需要复杂表示。
抽象域(A):包含的是类型设计时支持使用的值的空间。这些值是由表示域“抽象/想象”出来的,也是使用者关注的。
抽象函数(Abstraction function):R和A之间映射关系的函数。AF:R→A
表示不变量(Rep invariant):将表示空间的值映射到布尔值。RI : R → boolean

理解

ADT实现者关注R,而用户关注A, AF就是我们因此在R和A之间建立的一个映射,用户关注的A必须均能实现,而我们实现的空间中的内容并不需要所有都体现到A中去,所以该映射一定是满射,而不一定是单射。
R为表示值构成的空间,包含实现者看到和使用的值。A为抽象值构成的空间,包含client看到和使用的值。

在表示的过程中,就出现了表示不变性RI,即某个具体的“表示”是否是“合法的”。
也可将RI看作:所有表示值的一个子集,包含了所有合法的表示值 。
也可将RI看作:一个条件,描述了什么是“合法”的表示值。
RI和AF的一个实例:
RI和AF的一个实例

这里RI强调合法,即只要满足不包含重复字符的字符串这一条件,就可以出现在表示空间里。
而AF作为一个映射,将s中的所有字符从表示空间对应到抽象空间中去。
同一个ADT,可以有多种表示;不同的内部表示,需要设计不同的AF和RI。选择某种特定的表示方式R,进而指定某个子集是“合法”的(RI),并为该子集中的每个值做出“解释”(AF)——即如何映射到抽象空间中的值。
设计ADT时需要执行的相关步骤:
(1) 选择R和A;
(2) RI——合法的表示值;
(3) 如何解释合法的表示值——映射AF。
而且要做出具体的解释:每个rep value如何映射到abstract value。

表示空间相同,但RI不同:
表示空间相同,但RI不同
表示空间和RI相同,但AF不同:
表示空间和RI相同,但AF不同

总之,一个ADT的实现不仅是选择表示域(规格说明)和抽象域(具体实现),同时也要决定哪一些表示值是合法的(表示不变量),合法表示会被怎么解释/映射(抽象函数)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值