软件构造第3——ADT和OOP(二)

3.7 规格说明、前置/后置条件

  1. 规格说明是实现者和使用者之间的契约。方便开发者规范开发,使用者阅读、使用方便,使开发者和使用者可以通过此规范达到互不干扰的目的。需要包括方法名称、功能、参数和返回值。
  2. 组成:
    前置条件与后置条件
  3. 前置条件(要求),关键词:require
    表示要调用该方法的状态,用来约束调用者
  4. 后置条件(承诺),关键词:effects
    表示前置条件满足后该方法必须遵循的规则。如果前置条件满足,后置必须满足,前置不满足,后置也就无所谓。
    在这里插入图片描述
  5. 除了前置后置条件的声明,其他的规格说明写在注释里。
    @param:对参数的说明,尽可能将前置条件放入此处。
    @return:描述结果,尽量将后置条件放到这里。
    @throws:记录每个异常
    在这里插入图片描述
  6. Javadoc规格说明书写格式化规范
    在这里插入图片描述
  7. 可变的方法对于规格说明的要求更加严格,但也依赖于规格说明,如果没有按照规格说明执行,则可能会发生错误,而不可变的方法直接严格阻绝错误发生。
  8. 可以利用黑盒测试来测试代码是否符合规格说明。

3.8 行为等价性

确定行为的等价, 关键是一个规格说明实现是否可以替换另一个。

3.9 规约的强度

  1. 强度定义:
    (1)确定的:只有一个返回值和一个最终状态。
    (2)低确定的:允许同一输入多个有效输出。
    (3)非确定的:输出结果不确定。
    前置条件越弱,后置条件越强,则该规格说明越强。(要求少,承诺多)
    在这里插入图片描述
  2. 图表规格说明:一个区域一个规格,包含的点是其实现。规格越强,区域越小(实现变少了)。
    在这里插入图片描述

3.10 ADT操作的四种类型

  1. Creators:产生类型的新对象。
    可以实现构造函数(工厂方法),也可以是一个静态方法。
  2. Producers:在已有的对象基础上产生新对象。
    在这里插入图片描述
  3. Observers:输入抽象类型的对象,返回其他类型的对象。
    在这里插入图片描述
  4. Mutators:改变对象。通常为void,有时是Boolean。
    比如list.add。
    在这里插入图片描述

3.11 表示独立性

抽象数据类型的使用独立于其表示。用户在使用时不用管内部如何实现,内部实现变化也不影响调用,除非契约改变。

3.12 表示泄露

ADT的可见、可被客户端修改。

3.13 不变量、表示不变量

  1. 不变量:程序的属性,每个抽象数据类型都应保有自己的不变量,这些不变量被构造函数创建后保持不变,其正确性不依赖于其他模块,由公共方法调用维护,方法执行期间可能暂时失效。
  2. 表示不变量RI:将表示值映射到布尔值。告诉我们们空间R中的r是否被AF映射到了空间A中的某个值 。

3.14 表示空间、抽象空间、AF

  1. 表示空间R:实现时用到的值空间。
  2. 抽象空间A:客户端可以看到的和使用的集合。
    在这里插入图片描述
  3. AF抽象函数:将rep值映射到它们所代表的抽象值,表示R到A 的映射。AF为满射,未必是单射,未必时双射。

3.15 以注释的形式撰写AF、RI

例:对于相同的表示空间可以用不同的RI和AF表示。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值