OO第三单元总结

实现规格要求所采取的设计策略

这个单元的作业给出了JML规格的说明,我采取的设计策略是先通读JML规格,理解其前置条件、后置条件、异常的抛出等,然后进行代码的设计,对于实在看不明白的规格的意图,我会直接将规格翻译成相应的代码,代价是代码的运行的复杂度较大。对于异常类的实现,采取HashMap保存异常发生的次数以及id进行实现。

基于JML规格来设计测试的方法和策略

本单元的测试由于程序规模较小,我主要采用了针对JML规格自行设计样例进行针对性测试和边界测试的方式进行测试。

总结分析容器选择和使用的经验

在JML规格中描述的数组中,如果两个数组存在着一一对应的关系,如Person类的acquaintancevalue数组,使用HashMap进行实现,对于其他数组,选择使用ArrayList进行实现。

性能问题

1、在isCircle方法中采用了函数递归的深度优先搜素算法,在queryBlockSum方法中没有理解好规格的目的,直接翻译使用二层循环实现,整个方法时间复杂度达到了O(n^3),后在网上搜索后发现可以使用并查集来解决该性能问题。
2、在Dijkstra算法中,采取了O(n^2)的实现方法,后发现存在一种使用优先队列实现的O(nlogn)复杂度的方法。

作业架构设计

在架构上,对于图模型的建立,Person类的实例作为图的节点,acquaintance和value表示边和边的权值,Network类的people保存了所有节点,由此建立了整张社交关系图。Group类描述了people数组的子集应有的关系,Message类则实现了节点与节点间的交流。

posted @ 2021-06-01 16:58  OUZHUOJIAN  阅读(40)  评论(0)    收藏  举报