JAVA的规约、AF、RI及暴露安全性

规约的作用

一、规约可以使得客户端和实现者之间达成某种契约,简单来说,规约中描述了我们的方法实现的具体功能以及要应用我们的方法需要满足的要求,有了规约,就有了明确的任务,也就能够判断我们的代码是否实现了功能(可以说我们的程序有了对错之分),也有助于开发者之间的理解;同时由于实现者与客户端达成契约,对于双方都有了明确的要求,调用双方都需要遵守,出现问题后的责任也有了明确的区分,而不是简单的依靠程序员或顾客的“自觉”实现。

二、规约是对我们方法函数的抽象,我们的客户端不需要知道方法是如何被实现的;实现者也不需要了解自己的方法将会如何被应用。规约扮演了一个“防火墙”的角色,实现了解耦的作用。

规约的内容

规约应当指明以下内容:

一、输入和输出的数据类型是什么

二、函数的功能是什么(输入什么内容,返回什么结果),对其正确性的预期

三、函数性能的预期

规约应该包括以下两部分结构:

前置条件:是对客户端的约束,即使用方法时必须满足的条件

后置条件:是对实现者的约束,即方法结束时必须满足的条件

注意事项

一、规约中只讲实现什么,不讲怎么实现,比如我们只需要写“返回数组中的最大值”,而不是“通过遍历比较返回数组中的最大值”

二、在我们的方法中,当前置条件被满足时,后置条件必须满足。而当前置条件不满足时,方法中可以是任意操作而实现者没有提醒的义务,但通过快速失败(如检测并抛异常)可以使得bug更容易被找到。

三、方法应该尽量不修改输入的参数,要求一定要修改时必须在后置条件中声明。

四、可以在规约中说明某个量不可变,以告知客户端避免修改其内容。

五、注意方法规约的格式,开头为/**,之后每行以*开头,最后一行以*/结尾。

RI、AF及暴露安全性

作为一种良好的编程习惯,这三个内容都应该在抽象数据类型的声明后书写说明。
RI

RI就是Rep Invariant,也就是表示安全性,在RI中需要说明,什么样的表示是合法的,可以是合法表示值的一个集合,也可以是合法表示需要满足的条件。
AF

AF就是Abstraction Function,也就是抽象函数,他是解释表示值与抽象值之间对应关系的函数,我们可以把他当作对合法表示值含义的解释说明(如解释每个rep表示什么内容)。
暴露安全性

暴露安全性常常写作Safety from rep exposure,这部分是一个“自证清白”的过程,简单来说,这里要说明的就是对于我们的内部表示,为什么其不会发生对外泄露,一般来说,如果是对于private的不可变的类型,我们只需要说明其是私有且不可变的即可,但对于可变的类型说明比较复杂,往往需要我们对如何防止其暴露的操作进行说明(比如返回值是其一个副本而非其本身)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值