软件构造Lab2心得与感受

                                                                                            软件构造Lab2心得与感受

上周日刚刚结束了lab2的提交,可惜没有时间来进行lab2的总结与感受,所以在这周一尽快将这次的实验小总结一下。

本次lab2的目的是:

1. 针对给定的应用问题,从问题描述中识别所需的ADT;

2. 设计ADT 规约(pre-condition、post-condition)并评估规约的质量;

3. 根据ADT 的规约设计测试用例;

4. ADT的泛型化;

5. 根据规约设计ADT 的多种不同的实现;针对每种实现,设计其表示(representation)、表示不变性(rep invariant)、抽象过程(abstraction function)6. 使用OOP 实现ADT,并判定表示不变性是否违反、各实现是否存在表示泄露(rep exposure);

7. 测试ADT 的实现并评估测试的覆盖度;

8. 使用ADT 及其实现,为应用问题开发程序;

9. 在测试代码中,能够写出testing strategy 并据此设计测试用例。

首先,我们先回顾一下lab2的主要内容:

1.我们需要完成一个图的各种功能的实现,并且通过junit测试来测试我们编写代码的正确性;之后,通过我们已经构建好的图的实现,来构思一个关于诗的小功能,包括句子的扩充,将句子拆分表示等等;

2.我们需要用第1个任务中实现了的图的功能来进行lab1中人物关系图的改编,并通过junit测试对代码的正确性进行测试;

3.这也是lab2的一个新东西的引入,需要查看我们代码的覆盖率。

之后,我们对每个任务的进行一个详细的讨论:

任务1.

这也是lab2中百分之八十的工程量。这个任务比较颠覆我们认知的是需要我们先编写test文件,之后再进行类的实现,这样做的目的是明确我们的思路,从而只需要根据自己的思路进行各种方法的实现即可。

(1) ConcreteEdgesGraph的实现

首先,我们需要设计Edges类,即边,定义边的起点,终点和权重为private

private final L source,target;

private final int weight;

然后完成一些关于边的方法,可以按照以下的框架进行构造:

(1)求该边的起点 (2)求该边的终点 (3)求该边的权重 (4)toString函数 (5)检查表示不变性

之后再开始实现ConcreteEdgesGraph

这里已经给出了定义

private final Set<String> vertices=new HashSet<>()

private final List<Edge> edges=new ArrayList<>();

还是给出需要构造的方法的框架:

(1)添加顶点   (2)移除顶点    (3)添加新边   (4)返回图中所有的点   (5)已知起点求边   (6)已知终点求边   (7)检查表示不变性

(2)ConcreteVerticesGraph实现

还是先设计Vertex类,定义点的名字,它的所有起点和重点为private

private final L point;

private final Map<String,Integer> itssource;

private final Map<String,Integer> itstarget;

然后完成一些它的算法,框架如下:

(1)初始化     (2)检查表示不变性    (3)返回点的名字       (4)返回该点的起点和对应的边      (5)返回该点的终点和对应的边   (6)加入或删除一个起点     (7)加入和删除一个终点   

之后实现ConcreteVerticesGraph

这里也是已经给出了定义private final List<Vertex> vertices=new ArrayList<>();

需要构造的方法的框架:

(1)添加点    (2)添加边     (3)删除一个点     (4)返回所有的点    (5)求一个点的起点和对应的边(6)求一个点的终点和对应的边

然后,到了一个比较坑的地方,突然告诉我们需要进行implementations generic,即改成泛型,这里不要慌,eclipse有报错和自动纠错功能,按照提示将edge类和vertex类改为edge<L>和vertex<L>,然后根据eclipse的提示进行修改即可。修改完之后图的大致功能就基本实现了,开始进行诗的部分的编写。

诗的部分的方法框架:

(1)从文件终读入诗句,将相邻的元素间构造边    (2)扩充字符串    (3)将诗连城字符串输出

这里说一下扩充字符串的一个思路:

每次读取一个词,作为起点,记为A,下一个词作为终点,记为B,在图中寻找A起点的终点集中是否有与B的起点集相同的元素,并找到权重最大的和的点加入到A与B之间。

任务2.

走到这里基本标志着lab2的完成,我们通过引用构造好的图的实现来完成lab1的人物关系图

这里用ConcreteEdgesGraph和ConcreteVerticesGraph均可实现,我们以ConcreteEdgesGraph为例子

首先建立private final ConcreteEdgesGraph<Person> persongraph

需要的方法框架:

(1)加入新的人物(对应于加入点)     (2)为某人添加朋友(对应于两人之间建立一条权重为1的边)     (3)计算两人的最长距离(其实还是对数据结构内容的回顾)

之后设计测试文件即可,这里有一个问题是在写测试文件的时候,无法测试加入点的方法,因为点集是被设置为private的类型,如果我们坚持要测试该方法,可以通过将private删去进行测试,但是无法做到二者同时满足,我只好在边的测试里测试点的加入,如果点的加入不正确的话,边的加入必然不正确,所以间接测试点的加入的正确性。

实验的部分大致就这样,下面简单说一下进行了5周的软件构造课的感受。

软件构造确实是每一个程序员必须掌握的知识,其课程的重要性十分显然,老师上课也非常的认真,并且对学生很负责,几次的缺课都想办法补了回来,并且在外地仍然通过摄像头为大家进行了实验的讲解,但是还是我们毕竟是初学者,全英文的PPT和实验手册实在是读的吃力,老师上课的语速也实在有点跟不上,希望老师可以削微削微讲的慢一点,方便大家课堂上更好的掌握。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Cesium Lab 2是一款基于CesiumJS开发的三维地理信息可视化工具。下载与安装Cesium Lab 2相对简单,以下是具体步骤: 1. 打开Cesium Lab 2的官方网站(www.cesiumlab.com)。 2. 在网站的首页上,你可以看到一个绿色的"Download"(下载)按钮,点击这个按钮。 3. 在下载页面上,你可以选择适合你操作系统的版本。目前Cesium Lab 2支持Windows、Linux和OS X。根据你的系统,点击相应的下载链接。 4. 下载完成后,你将得到一个压缩文件(通常是ZIP格式)。解压缩该文件,你将看到Cesium Lab 2的安装文件和相关文件夹。 5. 运行安装文件(通常是一个可执行文件),然后按照屏幕上的指示进行安装。你可以选择要安装的目标文件夹和其他选项。 6. 完成安装后,你可以通过开始菜单、桌面图标或其他方式打开Cesium Lab 2。 7. 打开Cesium Lab 2后,你可以开始使用它进行三维地理信息的可视化。你可以导入地理数据、添加图层、设置样式等。 需要注意的是,Cesium Lab 2是一个商业软件,可能需要购买许可证才能正常使用。在安装过程中,可能会要求你输入许可证信息或进行激活。 总结起来,下载与安装Cesium Lab 2是一个简单的过程。只需在官方网站下载适合你操作系统的安装包,解压缩并运行安装文件,按照屏幕指示进行安装,然后即可打开并使用它进行三维地理信息可视化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值