lab2

2019年春季学期
计算机学院《软件构造》课程

Lab 2实验报告

姓名 陆玄宇
学号 1180300504
班号 1803005
电子邮件 781351087@qq.com
手机号码 15827169211

目录

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
3.3 Playing Chess 3
3.3.1 ADT设计/实现方案 3
3.3.2 主程序ChessGame设计/实现方案 3
3.3.3 ADT和主程序的测试方案 3
3.4 Multi-Startup Set (MIT) 4
4 实验进度记录 4
5 实验过程中遇到的困难与解决途径 4
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实验环境配置

在这里给出你的GitHub Lab2仓库的URL地址(Lab2-学号)。

3实验过程
请仔细对照实验手册,针对三个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但千万不要把你的源代码全部粘贴过来!)。
3.1Poetic Walks
先重写一个图出来,根据所写出来的图进行按关键词写诗的操作
3.1.1Get the code and prepare Git repository
从实验手册中给出的地址进行下载
3.1.2Problem 1: Test Graph
测试静态方法生成String类型的Graph。

3.1.3Problem 2: Implement Graph
该部分要求重写Graph里的方法,分别以点为基础的图和以边为基础的图。
3.1.3.1Implement ConcreteEdgesGraph
该类以Edge为基础重写Graph,用集合来存储点和边(Edge),每有Edge的增加就会影响到集合的更改,而点的删除也需要在集合中查询匹配。
由于图中的边不可重复,设计checkRep()

其中,重置边的方法比较复杂

JUnit测试

3.1.3.2Implement ConcreteVerticesGraph
CheckRep同理

这里的重置更加复杂,需要根据两个点是否已经在图中进行不同的操作

JUnit测试

3.1.4Problem 3: Implement generic Graph
3.1.4.1Make the implementations generic
将程序中所有String改为L即可实现泛型化
3.1.4.2Implement Graph.empty()

改为这样即可
3.1.5Problem 4: Poetic walks
3.1.5.1Test GraphPoet
创建一个文本文件作为基本资料,根据此作图,在单词之间有权值,输入关键词,程序根据权值向其中填词,写成一首诗
3.1.5.2Implement GraphPoet
读入文件,并将单词放入List

将所有的单词放入图中,每两个单词之间都有权值

3.1.5.3Graph poetry slam
对GraphPoet进行测试

3.1.6Before you’re done

3.2Re-implement the Social Network in Lab1
根据3.1中重写的图将上个实验重写一遍
3.2.1FriendshipGraph类
加载Vertice的图类进行重写
添加新的朋友直接add就可以了

重置朋友关系

3.2.2Person类
只需有一个名字和获取名字的方法

3.2.3客户端main()
直接使用lab1中的main

3.2.4测试用例
直接使用lab1中的test

3.2.5提交至Git仓库

3.3Playing Chess
3.3.1ADT设计/实现方案
检查输入位置是否有棋子,如果有,棋子是什么

查看两个玩家分别有多少个棋子

查找在某个坐标上的棋子是什么

移除某个坐标上的棋子

在某个坐标上放置棋子

查看某处棋子的主人

3.3.2主程序MyChessAndGoGame设计/实现方案
输入1进入国际象棋,输入2进入围棋,然后分别调用围棋的game和国际象棋的game
3.3.3ADT和主程序的测试方案
介绍针对各ADT的各方法的测试方案和testing strategy。
介绍你如何对该应用进行测试用例的设计,以及具体的测试过程。
4实验进度记录
请使用表格方式记录你的进度情况,以超过半小时的连续编程时间为一行。
每次结束编程时,请向该表格中增加一行。不要事后胡乱填写。
不要嫌烦,该表格可帮助你汇总你在每个任务上付出的时间和精力,发现自己不擅长的任务,后续有意识的弥补。
日期 时间段 计划任务 实际完成情况
4.6 20-22 看实验手册,初步了解p1 完成
4.7 20-22 完成p1的两个图 的重写 大半完成
4.9 20-22 完成p1写诗功能 完成
4.10 20-22 完成p1测试和p2 未完成p2
4.11 20-22 完成P2 完成
4.12 8-10 P3的Piece类和Player类及框架 完成
4.12 20-22 完成p3 未完成,框架完全错误,调用出错
4.13 20-22 完成P3 未完成,对几个类之间的关系老是出错,没有头绪
4.14 完成P3 未完成,压时间上交
5实验过程中遇到的困难与解决途径
遇到的难点 解决途径

运行程序时爆出空指针错误 未对定义的哈希图初始化,初始化后问题解决

不知道如何重写vertice里的set 上网借阅学长的实验报告,找到思路
6实验过程中收获的经验、教训、感想
6.1实验过程中收获的经验和教训
实验一定得早点写!一定得早点写!一定得早点写!
Java学的还是太少了,下去还得继续学Java,对类之间的调用关系老是迷糊,不过写实验的收获还是很多的,更熟悉Java就是其中一部分
写程序时一定要有清晰的思路,不能写到哪是哪,对程序的主体框架一定要想好,不能一知半解
6.2针对以下方面的感受
(1)面向ADT的编程和直接面向应用场景编程,你体会到二者有何差异?
主要差异还是在抽象化,不需要在意如何实现这个功能,只管用就可以了
(2)使用泛型和不使用泛型的编程,对你来说有何差异?
未有明显差异
(3)在给出ADT的规约后就开始编写测试用例,优势是什么?你是否能够适应这种测试方式?
可以一边写程序一边检查是否出错
(4)P1设计的ADT在多个应用场景下使用,这种复用带来什么好处?
减少代码重复量,方便编写程序
(5)P3要求你从0开始设计ADT并使用它们完成一个具体应用,你是否已适应从具体应用场景到ADT的“抽象映射”?相比起P1给出了ADT非常明确的rep和方法、ADT之间的逻辑关系,P3要求你自主设计这些内容,你的感受如何?
没能完全适应,自身能力不足,感觉十分困难
(6)为ADT撰写specification, invariants, RI, AF,时刻注意ADT是否有rep exposure,这些工作的意义是什么?你是否愿意在以后编程中坚持这么做?
明确ADT的使用规范
(7)关于本实验的工作量、难度、deadline。
工作量稍大,主要还是自己太拖延,难度有些大
(8)《软件构造》课程进展到目前,你对该课程有何体会和建议?
收获还是很多的,关于编写程序时思考的一些东西也会变多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值