oo第三单元博客作业

OO第三单元博客作业

一、 梳理JML语言的理论基础,应用工具链情况

(1) 理论基础:JML是一种形式化的、面向java的行为接口规格语言,遵循契约式设计规则,通过前置、后置、不变式等的约束严格描述某个模块的行为,以防止出现设计错误。JML允许在规格中混合使用java语法成分和JML引入的语法成分。同时JML可以使用openJML进行检查,以保证程序动态和静态的正确性。

(2) 工具链:lowa State JML工具提供了断言检查编译器jmlc,可以将JML注释转换为运行时的断言;文档生成器jmldoc,可用于生成含有额外JML信息的javadoc文档;jmlunit可以根据JML生成单元测试。除此之外,还有ESC/Java2、OpenJML等工具。

 

二、 部署JMLUnitNG/JMLUnit,针对Graph接口的实现自动生成测试用例,并结合规格对生成的测试用例和数据进行简要分析

 

三、 按照作业梳理自己的架构设计,并特别分析迭代中对架构的重构

(1)第九次作业

本次作业需要实现Path和PathContainer,根据JML要求实现相应的代码,设计到两个查询方法,一个是Path类中的查询结点个数(貌似没有相应指令),另一个是PathContainer中查询容器内不同结点的个数,将该个数的统计放在add和remove函数中实现,每当增加或删除一条路径使,就对结点的个数进行更新。

 

(2)第十次作业

本次作业需要实现Path和Graph,Graph继承自PathContainer,增加了查询是否存在某个结点、查询两结点是否连通、查询是否存在某条边、两个结点是否连通、查找两个结点之间的最短路径,所有的查询算法实践复杂度均为O(1),查询所需的所有信息会在add path和remove path的过程中进行更新。计算最短路径采用的是floyd算法。

 

(3)第十一次作业

本次作业需要实现Path和RailwaySystem,RailwaySystem继承自Graph,增加了查询两个结点之间的最小票价、查询两个结点之间的最小换乘次数、查询两个结点之间的最小不满意度、查询连通块的个数,和上一次作业的思路相同,保证查询算法的时间复杂度为O(1),在add和remove中实现相应信息的更新,在remove时,需要遍历容器中所有的path重新构建所需的二维数组,以便能够快速查询出正确的结果,实际上就是将所有path重新add的过程。 计算最短路径、最小票价、最小不满意度均采用的是floyd算法,计算连通块的个数采用的是dfs算法。

 

 

四、 按照作业分析代码实现的bug和修复情况

第九次作业没有出现bug

第十次作业,在remove path之后没有将结点到0-250的映射解除,导致会出现多个结点映射到同一个数字的情况。

第十一次作业,对两个结点之间的最小票价进行更新之前需要先判断更新之后的最小票价是否变小,如果变小则更新,否则不更新。不判断则会出现两点之间的最小票价在更新之后变大的情况。

代码测试做得不充分,程序很多简单的问题没有发现。

 

五、 简述对规格撰写和理解上的心得体会

此单元旨在帮助我们理解规格化的概念,学习JML的方法规格表示,针对给定功能要求和方法规格,实现方法和功能;学习JML的类型规格表示和基于规格的测试方法,增量扩展功能,增加方法规格和类型规格;学习类型层次下规格设计及分析,增量扩展功能,引入类型层次下的规格。规格可以帮助我们更准确地实现类和方法,但是此单元中,在层次化设计方面,我做的不是很好,不能很好地应用继承等实现一个良好的层次化设计,需要学习和改进的地方还有很多。

posted on 2019-05-22 20:03  suirui  阅读(103)  评论(0)    收藏  举报

导航