临近期末复习,光看教材让人毫无头绪,故借再次分析和总结以往做过的实验来巩固知识要点。下面是我重温Lab2的时候的思考与心得体会。这一篇主要讲他所涉及到的知识点,在下一篇中我们讲着重展开讲实验过程。
Lab2:
目标分析
本次实验训练抽象数据类型(ADT)的设计、规约、测试,并使用面向对象编程(OOP)技术实现ADT。具体来说:
针对给定的应用问题,从问题描述中识别所需的ADT;
设计ADT 规约(pre-condition、post-condition)并评估规约的质量;
根据ADT 的规约设计测试用例;
ADT的泛型化;
根据规约设计ADT 的多种不同的实现;针对每种实现,设计其表示(representation)、表示不变性(rep invariant)、抽象过程(abstraction function)
使用OOP 实现ADT,并判定表示不变性是否违反、各实现是否存在表示泄露(rep exposure);
测试ADT 的实现并评估测试的覆盖度;
使用ADT 及其实现,为应用问题开发程序;
在测试代码中,能够写出testing strategy 并据此设计测试用例
本章实验主要训练我们熟练地使用ADT和OOP编程,理解其编程的思想,并熟悉git的原理以及使用方法:
知识点:
考核重点如下:
基本数据类型就是最为基础的,和C语言类似,多了员工boolean类型,返回值是true和false,对象数据类型就是诸如String和Big Integer这样的数据类型,通常,基础类型用小写而对象类型用大写。
静态、动态类型检查,前者是在编译阶段进行的,而后者是在运行的阶段进行检查
静态类型可以检查出
- 类型的语法错误
- 类名或函数名的错误
- 参数的数目错误
- 返回值类型的错误
动态的检查:
5. 非法的参数值(如除以0,0以变量的形式定义)
6. 非法的返回值
7. 越界
8. 空指针
总结起来,静态检验即检验类型和数目,动态检验即检验值是否符合要求
既不是静态又不是动态的:
变与不变:
对于基本类型的值,使用单线箭头指向实际值,不需要表明数据类型。
对于对象的值:
如果是可变对象,使用单线椭圆,椭圆内写明对象的类型及对象内的值。
如果是不可变对象,使用双线椭圆,
椭圆内写明对象的类型及对象内的值。
如果是对象的不可变引用(final标记),使用双线箭头。eg:id
如果是对象的可变引用,使用单线箭头。eg:age
eg
方法的规约与前后置条件
行为等价性:
看是否满足规约的条件。
前后置条件:
前置条件满足,则后置一定要满足(客户要求的一定要做到)
若前置不满足,后置可以随意(没客户没要求,可以随便整)
设计规约:
/**
* sentence to describe
* @param type paramiters
* @requires ***
* @effects ***
* @return type param
*/
规约的强度:(强的比弱的好)
前置条件更弱,后置条件更强,则规约更强
ADT 操作的四种类型
AF与RI是什么,怎么写
AI即abstraction function 抽象函数
RI即使representation invariants表示不变两