RI的作用


前言

在软件构造课程中,学到了一个重要的概念——RI,老师要求在编写代码过程中,在注释里要写明RI,AF等等,起初觉得编写这样的东西毫无作用,因为它只会在源码中体现,不会暴露到ADT的规约中,不会被除自己外的其他人看到。


一、什么是RI?

这里涉及到几个概念:

  • 表示独立性(Representation independent):client使用ADT时无需考虑其内部如何实现,ADT内部的变化不应影响外部spec和客户端。
  • 不变量(Invariant):程序的一个属性,对于程序的每一个可能的运行时状态,它总是为真。例如:immutability就是一个典型的“不变量”。
  • 表示域(R):包含的是值具体的实现实体的空间。一般情况下ADT的表示比较简单,有些时候需要复杂表示。
  • 抽象域(A):包含的是类型设计时支持使用的值的空间。这些值是由表示域“抽象/想象”出来的,也是使用者关注的。
  • 抽象函数(Abstraction function):R和A之间映射关系的函数。AF:R→A 表示不变量
  • 表示不变量(Rep invariant):将表示空间的值映射到布尔值。RI : R → boolean Safety from Rep
    Exposure:防止表示泄露的方法

AF就是说明将一个抽象的东西(也就是我们为ADT定义的属性,即Rep),表示成程序可以表示的东西(也就是我们想要去表示的东西,比如图,列表,一次投票等等)。
RI就是对所有表示值(Rep可以表示的所有值)的一个子集,包含了所有合法的表示值 。也可以看做:一个条件,描述了什么是“合法”的rep值。

二、为什么要在注释中去写

RI其实是写给编写代码的人自己看的。
为ADT撰写specification, invariants, RI, AF,时刻注意ADT是否有rep exposure,这些工作的意义是什么?
这些工作可以在编程过程中为我们提供指导和约束,在设计好后,我们的所有工作都必须在这个前提下进行,可以减少思考(胡思乱想,头脑风暴)的空间,也减少出错的可能性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值