ADT设计中的规约、RI、AF

  • 何为AFRI?

 

AF: 抽象函数

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

R:表示空间,就是代码中实际的值

因此,建立AF:R到A的映射

一定满射(凡是用户使用的,R中都有表示)

不一定是单射(R中用到的,用户不一定能使用)

 RI: 表示不变性

AF产生表示不变性RI。

含义:一句话,描述什么是合法的表示值

 

  • 为何使用AFRI?

程序员在具体实现某个类之前,首先规定好这个类的RI与AF,一方面AF明确了该类中方法对属性的使用,需设计服务AF的方法;另一方面,RI时刻提醒着程序员代码健壮性,维持类的不变性以保证使用该类时的安全,避免表示泄露。

通常会使用checkrep方法辅助检查RI。

 

避免表示泄露的方法:

  1. public 类型的数据 : private final;
  2. mutable 类型共享引用: 防御式拷贝;
  3. 不包含mutate方法;

 

  • 此外,再写一个我上课时混淆的点:AFRI与规约的区别与联系:

联系:都是嵌在代码中的注释,能辅助我们写代码的思路与阅读代码;

区别:

AFRI:认识到什么是RI,AF,并且给予随时的检查,能够让我们有效的避免潜在的bug,增强程序的强健性,因此其更倾向于服务类的构造者

规约:

软件设计中的规约指明了某个方法要求的输入及产生的影响。
规约是程序与客户端之间达成的一种契约:使用者有义务按照规约的要求输入数据,程序对正确输入的数据应进行正确的处理。使用者和程序都有义务遵循规约。
规约据此可以分为两部分:前置条件(pre-condition)和后置条件(post-condition)。前置条件是对客户端的约束,是使用方法时必须满足的条件;后置条件是对开发者的约束,是方法结束时必须满足的条件 。
使用者在使用方法时,不必关心方法的具体实现,只需阅读规约便可以理解方法的作用。
综上,规约服务开发者与使用者双方

 

posted @ 2022-06-05 22:10  是鸟哥没错  阅读(323)  评论(0)    收藏  举报