1. 实验目标概述
本次实验训练抽象数据类型(ADT)的设计、规约、测试,并使用面向对象 编程(OOP)技术实现 ADT。具体来说:
l 针对给定的应用问题,从问题描述中识别所需的 ADT;
l 设计 ADT 规约(pre-condition、post-condition)并评估规约的质量;
l 根据 ADT 的规约设计测试用例;
l ADT 的泛型化;
l 根据规约设计 ADT 的多种不同的实现;针对每种实现,设计其表示 (representation)、表示不变性(rep invariant)、抽象过程(abstraction function)
l 使用 OOP 实现 ADT,并判定表示不变性是否违反、各实现是否存在表 示泄露(rep exposure);
l 测试 ADT 的实现并评估测试的覆盖度;
l 使用 ADT 及其实现,为应用问题开发程序;
l 在测试代码中,能够写出 testing strategy 并据此设计测试用例。
2. 实验环境配置
安装配置EclEmma:
/参考https://www.eclemma.org/installation.html中Option2/
打开Eclipse,Help->Install New Software,在Work with中add http://update.eclemma.org/,检查最新的EclEmma的版本,Next,遵循安装向导完成安装。
3. 实验过程
3.1 Poetic Walks
需要构造一个Graph,实现或完善规约要求的内容。以边和点两种方式实现接口,需要将String拓展为泛型L。实现ConcretEdgesGrap和ConcreteVertexGraph中接口中定义的各个函数。问题四中,根据文件输入,如果相邻两个词之间构成一条有向边,从而构成一棵树,再输入给定的句子,若相邻两个词之间有一个词,则插入,有多个,则选取边权重较大者。
3.1.1 Get the code and prepare Git repository
在git bash中输入命令:
git clone https://github.com/rainywang/Spring2020_HITCS_SC_Lab2.git
3.1.2 Problem 1: Test Graph
将Graph empty()方法修改为
测试结果:
3.1.3 Problem 2: Implement Graph
3.1.3.1 Implement ConcreteEdgesGraph
先写Edge类:
-
属性有source, target, weight,注意Edge不可变,只有Getter,分别是getSource, getTarget. getWeight。
-
Edge函数初始化Edge的三个成员变量。
-
checkRep函数在Getter返回前,检查三个成员变量是否有空。
-
toString函数以字符串的形式展示该边的起点、终点和边权。