软件构造博客2 ADT课程随笔

本周即将提交的Lab2就是有关ADT的实验。于是在此针对自己总结一些ADT的易忘知识点。

良好的ADT:通过封装来避免客户端获取数据的内部表示(即“表示泄露”),避免潜在的bug。

ADT的特性:表示泄露,AF,RI。需要对这些核心特征进行描述并应用。

可变类型的对象:提供了可改变其内部数据的值的操作。

不变数据类型:其操作不改变内部值,而是构造新的对象。

设计好的ADT,靠“经验法则”,提供一组操作,设计其行为规约spec

如何测试ADT:

  测试creators, producers, and mutators:调用observers来观察这些

operations的结果是否满足spec;

  测试observers:调用creators, producers, and mutators等方法产生或

改变对象,来看结果是否正确。

  风险:如果被依赖的其他方法有错误,可能导致被测试方法的测试结

果失效。

  在了解AF,RI之前:R:表示空间,实际操作空间,由实际实现实体的值构成。A:抽象空间,由该类型设计支持的值组

成。ADT开发者关注表示空间R,client关注抽象空间A。

  AF:满足满射,未必双射和非单射。R中可能存在不映射至A的非法值。

  RI:可以看作一个包含所有合法表示值的R子集。

AF和RI是对ADT的“合法”范围的阐述和合法值的“解释”。

在设计ADT的时候,可需要checkRep所有可能改变Rep的方法,保证RI随时满足。

R空间的取值不同于A空间,是可以变化的。(有益的可变性)

在撰写代码时,用注释形式精确记录 AF 和RI。表示泄露的安全声明:给出未对外泄露内部表示的理由。也要写出泄露的风险。

 

构造器和生产期在创建对象时确保不变量为true,变值器和观察器具在执行时必须保持不变性。

 

总体来说,ADT设计应该遵循safe from bugs,easy to understand,ready for change.

posted @ 2022-05-24 23:37  Asteraria  阅读(23)  评论(0编辑  收藏  举报