软构lab2心得

    1. Poetic Walks

本环节给出了一个Graph接口,要求我们秉承测试驱动开发的思想,分别建立继承graph接口的边图类、点图类,并且在类中具体实现操作graph的一系列方法。另外,我们需要在类中具体实现Edge或Vertex数据型,在完成之后,用我们设计的图的抽象数据型完成poetic walks的工作。这一环节的主要目的是动手实践ADT的规约设计并具体设计、实现ADT。

      1. Problem 1: Test Graph <String>

 

        1. Implement ConcreteEdgesGraph
  1. 实现edge类:

AF、RI与防止Rep泄露的安全措施如下:

 

CheckRep()如下,检查权值是否都大于0,以及有起点和终点

 

该类成员变量:

 

,都用private final修饰这是为了防止表示泄露

 

其中的构造方法和各个方法的实现。

 

按source->target(weight)要求打印边的内容

  1. 实现ConcreteEdgesGraph

AF、RI与防止Rep泄露的安全措施如下:

 

为了防止表示泄露,在调用各个方法返回之前,使用checkRep方法检查是否有表示泄露的情况出现,具体实现以RI为原则:

 

这是它的checkup方法

这是其成员变量

 

Add方法:

 

   将vertex放入vertices

Set方法

 

为了能实现set中的remove方法,这里需要使用迭代器遍历边集。

Remove方法

 

这是经过idea优化过的,idea使用了removeif实现它。

Vertices sources targets方法

 

其中vertices方法应该返回一个新的集合,为了防止表示泄露。

sources方法新建了一个名为sourceweight的map返回。

Targets与之类似。

 

打印图的内容。

下面来看ConcreteEdgeGraphTest的实现

 

先对是否能形成图进行test,对三个点进行构建。

其次是对getsource和gettarget的test比较返回的点名即可

        1. Implement ConcreteVerticesGraph
  1. vertex类的实现

AF、RI与防止Rep泄露的安全措施如下:

 

这是其chekup

 

对父节点和子节点中的权值进行遍历,确保值均大于0.

它的成员变量

 

均用private final修饰,为了防止表示泄露,mark作为点名字,marksoure作为其所有父节点和边权值的map,marktarget作为其所有子节点和边权值的map,

 

返回点名和返回父节点集合和子节点集合,其中为了避免表示泄露,返回的是一个新的hashmap。

Addsource方法,

 

为当前点添加父节点

 若父节点已存在,则更新权值;若父节点不存在,为当前点加上一个父节点以及边

若weight为0,则移除父节点

vertices返回顶点集

sources这里进行了防御式拷贝

ConcreateGraphVerticesTest的实现

toString方法

检测是否能形成图,三个点。

        1. Implement Graph.empty()

 

使用Collections类的empty,emptylist,emptyset生成空的对象进行比较。

覆盖率运行结果.

 

      1. Problem 4: Poetic walks

实现一个类,利用之前实现的图结构,能够将文本中的文字转化为该种图结构,并且在图中搜索,完成对输入的句子的扩充。

        1. Test GraphPoet

// Testing strategy

    //  一、不同权值语料考察输出是否正确

    //1、出现空语料

    //2、出现权值不同,需要比较的语料

    //3、均是为1权值的语料

    //二、同一个语料考察不同input

    //1、空语句

    //2、带标点

    //3、不带标点

        1. Implement GraphPoet

 

AF,RI, Safety from rep exposure,如上图。

GraphPoet的实现

 

设计思路是将所有文本按空格分开,去掉附近的标点,全部小写后放入一个list,然后每次遍历两个单词,这两个单词如果有边了就增加权值,没有就加一条边。

Poem的实现

 

想法是每次对遍历的两个词作去标点和进行小写变换,然后对前一个点的子节点进行遍历,如果有点既是其子节点又是其后一个词的父节点,就先记录它,同时需要对权值进行遍历,选出最大的,同时要考虑到在循环内无法将input的最后一个词加入返回的字符串,所以需要最后特别加入它。

        1. Graph poetry slam

 

测试策略。

 

Test的实现内容

 

      1. FriendshipGraph

 

AF、RI、safety from rep exposure如图

 

成员变量,这里在idea里需要在P2模块的依赖增加P1

 

 

构造方法

 

这里进行加点和加边的操作,其中加边操作考虑到在这个问题中实际是无权图,故所有边均记权值为1,用set方法实现。

 

获取距离函数,这里主要就是把lab1中的距离函数做了一点修改,同样是使用广度优先搜索,new一个map来保存所有点到起点的distance,new一个queue来作为队列,起点先入队,然后出队,遍历子节点并且更新map,记录子节点到自己的距离,同时子节点入队,然后重复出队更新map的操作,其中只对为加入map的点做更新。

和之前lab1的输出一样

 

给出你的设计和实现思路/过程/结果。

      1. Person

Person类完全复制了lab1的person类。

 

在person里的成员变量:

 

Myfriends是存放这个person对象的朋友,allpeople存放当前以出现的人避免重名所以是静态,myname是该对象名字。

构造方法

 

对未出现的Person加入allpeople,出现过的直接打印错误并且结束程序,Person的名字为传入的字符。

给出你的设计和实现思路/过程/结果。

      1. 客户端main()

 

同样是完全复制了上一次的main函数,和上一次要求相同的设计了几个Person,构成图,

以此进行了长度为1(起点到终点距离为1)、2(起点到终点距离为2)、0(到自身)、-1(不存在回路)的输出,最后对一个同样的人再次创建person类,能看到报错。

 

给出你的设计和实现思路/过程/结果。

      1. 测试用例

对上一次的测试用例稍作修改

 

创建图,依次测试是否正确添加顶点。

 

创建图,依次测试能否正常增加边

 

测试distance方法,创建图,依次测试是否能正确输出路径长度

这是其test strategy

 

 

测试peoson类里方法的功能.

覆盖率测试是100%.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值