标签:OO Iterator 实现 生成器 BUAA 规格 JML hack
BUAA-OO 第三单元作业 JML 总结与思考
一、需求分析
利用java线程的相关知识实现
1)实现两个容器类 Path 和 PathContainer
JML规格⼊⻔级的理解和代码实现
2)实现容器类 Path 和数据结构类 Graph
JML规格进阶级的理解和代码实现、设计模式的简单实战,以及单元测试的初步使用尝试。
3)实现容器类 Path ,地铁系统类 RailwaySystem
JML规格进阶级的理解和代码实现、设计模式和单元测试的进阶级实战。
二、思路分析
1、基于度量的程序结构分析
代码行数统计(利用Statistic插件)
第一次
第二次
第三次
代码设计复杂度(利用MetricsReloaded插件)
ev(G)基本复杂度,用来衡量程序非结构化程度 iv(G)模块设计复杂度,用来衡量模块判定结构 v(G)独立路径条数
第一次
第二次
第三次
2、BUG分析
第一次:
强测中得分 100
互测:未被hack。未hack到别人。
坑点:
同学在第三次作业强测中。亡羊补牢,为时不晚。
第二次:
在强测中得分 100
互测:未被hack。未hack到别人。
坑点:
第三次:
在强测中得分 100
互测:未被hack。未hack到别人。
坑点:
3、架构分析
第一次:
五容器大法
Path:
ArrayList保存边
HashSet处理本质不同边数计数的问题
PathContainer:
Hash
关于容器的选择:
HashMap OR TreeMap?
第二次:
相比第一次,加入了
保存图:二维矩阵实现的邻接表,用arraylist套hashset来保存,能够有效地处理重边和自环的问题。
因为点的id在int范围内,而点数不多,故将点离散化。采用hashmap单独离散化,可以方便查找点是否存在。
每次修改的时候重构图,并求n次单源最短路。
关于最短路算法:
第三次:
完全没有重构。
相比第二次,我认为
借鉴了xg的写法,
修改了通过连边权0实现缩点的方法、通过并查集求联通块的方法。感觉架构上比较好看。
缩点:bfs
求联通块:
关于最短路算法:
每次修改
关于构图:
菊花图:
两种建法:
堆优化dijstra和spfa均可。
缓存的实现:
菊花图
标程架构学习:
三、知识技能总结
1、JML语言的理论基础、应用工具链情况:
任何情况下,如果当前类或所依赖的类已经提供了相应pure方法, 则应直接使用相应方法来构造当前的方法规格
作业中的示例:
•通过repOK来进行运行时检查
•LSP替换原则
•在任何父类型对象出现的地方使用子类对象都不会破坏user程序的行为
•Java提供的Iterator接口定义了三个操作
public Interface Iterator {
public boolean hasNext();
public Object next() throws NoSuchElementException;
public void remove() throws IllegalStateException, UnsupportedOperationException;
}
•集合类型需要提供一个迭代方法来返回一个生成器**(generator)**
•一个集合类型可以定义多个迭代器方法来提供多个生成器
•生成器的类型为Iterator
•生成器能够以迭代方式生成相应元素的对象,它实现了Iterator 接口
•迭代方法的规格定义生成器的行为,生成器的规格则遵循Iterator 接口规格
2、部署JMLUnitNG/JMLUnit,针对Graph接口的实现自动生成测试用例, 并结合规格对生成的测试用例和数据进行简要分析
3、JUnit
四、心得体会
1、规格撰写:
2、个人理解:
标签:OO,Iterator,实现,生成器,BUAA,规格,JML,hack 来源: https://www.cnblogs.com/Ryan0v0/p/10904875.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。