知识点:ADT

设计ADT:规格Spec–>表示Rep–>实现Impl

四类ADT操作
  • Creators
    • 实现:构造函数constructor或静态方法(也称factory method)
  • Producers
    • 需要有“旧对象”
    • return新对象
    • eg. String.concat()
  • Observers
    • eg. List.size()
  • Mutators
    • 改变对象属性
    • 若返回值为void,则必然改变了对象内部状态(必然是mutator)
表示独立性
  • client使用ADT时无需考虑其内部如何实现,ADT内部表示的变化不应影响外部spec和客户端。
抽象函数AF & 表示不变量RI

  • 检查RI:
    随时检查RI是否满足
    在所有可能改变rep的方法内都要检查
    Observer方法可以不用,但建议也要检查,以防止你的“万一”
测试ADT

因为测试相当于client使用ADT,所以它也不能直接访问ADT内部的数据域,所以只能调用其他方法去测试被测试的方法。

以注释的形式撰写AF、RI、 Safety from Rep Exposure
  • 抽象值构成的空间(抽象空间):客户端看到和使用的值
  • 程序内部用来表示抽象值的空间(表示空间):程序内部的值
  • 抽象函数(AF)

    • R和A之间映射关系的函数
    • 即如何去解释R中的每一个值为A中的每一个值。
    • AF : R → A
    • R中的部分值并非合法的,在A中无映射值
  • 表示不变性(RI)

    • 某个具体的“表示”是否是“合法的”
    • 所有表示值的一个子集,包含了所有合法的表示值
    • 一个条件,描述了什么是“合法”的表示值
  • 针对creator:构造对象之后,用observer去观察是否正确

  • 针对observer:用其他三类方法构造对象,然后调用被测observer,判断观察结果是否正确

  • 针对producer:produce新对象之后,用observer判断结果是否正确

  • 在代码中用注释形式记录AF和RI
    • 精确的记录RI:rep中的所有fields何为有效
    • 精确记录AF:如何解释每一个R值
  • 表示泄漏的安全声明
  • 给出理由,证明代码并未对外泄露其内部表示——自证清白
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值