2022年春季学期
计算学部《软件构造》课程
Lab 2实验报告
目录
1 实验目标概述 1
2 实验环境配置 1
3 实验过程 1
3.1 Poetic Walks 1
3.1.1 Get the code and prepare Git repository 1
3.1.2 Problem 1: Test Graph 1
3.1.3 Problem 2: Implement Graph 1
3.1.3.1 Implement ConcreteEdgesGraph 2
3.1.3.2 Implement ConcreteVerticesGraph 2
3.1.4 Problem 3: Implement generic Graph 2
3.1.4.1 Make the implementations generic 2
3.1.4.2 Implement Graph.empty() 2
3.1.5 Problem 4: Poetic walks 2
3.1.5.1 Test GraphPoet 2
3.1.5.2 Implement GraphPoet 2
3.1.5.3 Graph poetry slam 2
3.1.6 Before you’re done 2
3.2 Re-implement the Social Network in Lab1 2
3.2.1 FriendshipGraph类 2
3.2.2 Person类 3
3.2.3 客户端main() 3
3.2.4 测试用例 3
3.2.5 提交至Git仓库 3
4 实验进度记录 3
5 实验过程中遇到的困难与解决途径 3
6 实验过程中收获的经验、教训、感想 4
6.1 实验过程中收获的经验和教训 4
6.2 针对以下方面的感受 4
1实验目标概述
本次实验训练抽象数据类型(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 并据此设计测试用例。
2实验环境配置
简要陈述你配置本次实验所需环境的过程,必要时可以给出屏幕截图。
特别是要记录配置过程中遇到的问题和困难,以及如何解决的。
在 Eclipse IDE 中安装配置 EclEmma:可在HELP中下载在。
3实验过程
请仔细对照实验手册,针对两个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但千万不要把你的源代码全部粘贴过来!)。
3.1Poetic Walks
在这里简要概述你对该任务的理解。
给几句诗将其按规则重组。
用edge和vertice两种方式实现graph接口,并将其ADT泛型化。
3.1.1Get the code and prepare Git repository
如何从GitHub获取该任务的代码、在本地创建git仓库、使用git管理本地开发。
git clone +代码地址。到本地库。
3.1.2Problem 1: Test Graph
以下各部分,请按照MIT页面上相应部分的要求,逐项列出你的设计和实现思路/过程/结果。
测试Graph的各个方法。
3.1.3Problem 2: Implement Graph
以下各部分,请按照MIT页面上相应部分的要求,逐项列出你的设计和实现思路/过程/结果。
用ConcreteEdgesGraph和ConcreteVerticesGraph完成。
3.1.3.1Implement ConcreteEdgesGraph




Edge类;构造方法。
具体构造ConcreteEdgesGraph的五种函数。
3.1.3.2Implement ConcreteVerticesGraph

Vertices的构造方法;



ConcreteVerticesGraph的五种方法完成。
3.1.4Problem 3: Implement generic Graph
3.1.4.1Make the implementations generic
将所有的String替换为.
3.1.4.2Implement Graph.empty()

3.1.5Problem 4: Poetic walks
3.1.5.1Test GraphPoet
3.1.5.2Implement GraphPoet


3.1.5.3Graph poetry slam
3.1.6Before you’re done
请按照http://web.mit.edu/6.031/www/sp17/psets/ps2/#before_youre_done的说明,检查你的程序。
如何通过Git提交当前版本到GitHub上你的Lab2仓库。
在这里给出你的项目的目录结构树状示意图。

3.2Re-implement the Social Network in Lab1
在这里简要概述你对该任务的理解。
基于在Poetic Walks中定义的Graph及其两种实现,重新实现Lab1中的Friendship Graph类
3.2.1FriendshipGraph类
给出你的设计和实现思路/过程/结果。
Add:直接调用父类的add方法
Getdistence:判断两点是否相同,如果是则返回1如果不是,利用BFS获取距离创建一个Map来存储距离利用邻接表,将各点依次入队在弹出队列时计算相应距离并计入Map中.
3.2.2Person类
给出你的设计和实现思路/过程/结果。
沿用lab1。
3.2.3客户端main()
给出你的设计和实现思路/过程/结果。

3.2.4测试用例
给出你的设计和实现思路/过程/结果,覆盖度报告。

217

被折叠的 条评论
为什么被折叠?



