OO第三单元总结
实现规格要求所采取的设计策略
这个单元的作业给出了JML规格的说明,我采取的设计策略是先通读JML规格,理解其前置条件、后置条件、异常的抛出等,然后进行代码的设计,对于实在看不明白的规格的意图,我会直接将规格翻译成相应的代码,代价是代码的运行的复杂度较大。对于异常类的实现,采取HashMap保存异常发生的次数以及id进行实现。
基于JML规格来设计测试的方法和策略
本单元的测试由于程序规模较小,我主要采用了针对JML规格自行设计样例进行针对性测试和边界测试的方式进行测试。
总结分析容器选择和使用的经验
在JML规格中描述的数组中,如果两个数组存在着一一对应的关系,如Person类的acquaintance和value数组,使用HashMap进行实现,对于其他数组,选择使用ArrayList进行实现。
性能问题
1、在isCircle方法中采用了函数递归的深度优先搜素算法,在queryBlockSum方法中没有理解好规格的目的,直接翻译使用二层循环实现,整个方法时间复杂度达到了O(n^3),后在网上搜索后发现可以使用并查集来解决该性能问题。
2、在Dijkstra算法中,采取了O(n^2)的实现方法,后发现存在一种使用优先队列实现的O(nlogn)复杂度的方法。
作业架构设计
在架构上,对于图模型的建立,Person类的实例作为图的节点,acquaintance和value表示边和边的权值,Network类的people保存了所有节点,由此建立了整张社交关系图。Group类描述了people数组的子集应有的关系,Message类则实现了节点与节点间的交流。
浙公网安备 33010602011771号