BUAA-OO unit3 blog
一、实现规格所采取的设计策略
本单元任务为根据规格阅读实现具体代码,总体来说较为简单,不必自行实现太多架构设计,只需要阅读理解对应的类和函数规格,然后将其转化为Java代码即可。在具体实现中,需要注意的是对于容器的选择。例如实现queryBlockSum函数时涉及到图的搜索,如果采用了list很容易导致出现时间空间问题。这时候我选择采取HashMap来尽量减少这一问题发生的可能性。
二、结合课程内容,整理基于JML规格来设计测试的方法和策略
-
再次阅读JML规格,仔细检查是否有满足pure的要求,是否完整正确实现异常,是否满足前置条件与后置条件
-
使用Junit对具体的方法或者类编写样例进行测试
-
使用样例和随机数据进行测试(问问同学哪里可能出错)
三、总结分析容器选择和使用的经验
由于Message和Person都有独一无二的ID,所以我的作业中优先使用HashMap进行存储。在做的过程中我发现了提取信息时需要提取最新的信息,并且按照先进先出的顺序提取,考虑过采用队列存储。但是在做的过程中想到HashMap也是直接向数组最后添加元素的,所以也选择了直接使用HashMap。
四、针对本单元容易出现的性能问题,总结分析原因如果自己作业没有出现,分析自己的设计为何可以避免
本单元作业我做的比较迷茫,几乎完全是按照规格逐字逐句翻译过来的。在初次强测时只过了两个点。我只好骂中测等于编译通过。不过滑稽的是幸好中测等于编译通过,后来两次作业我的强测点一个都没有通过……由于时间原因,我也没有再次修复强测出现的bugs,而是直接留下了bugs。
由于我直接是wrong answer,所以我根本不清楚自己是否有性能问题。根据猜测应该是有的,因为对于queryBlockSum的实现我直接采用了DFS,而对于第三次作业的dijstra算法我也没有采取优化。如果有意出一些可能卡掉的数据的话,我必不可能通过。如果以后有时间的话,我还需要对这些算法学习一下(主要是数据结构学的也不行,DFS也是查了很多才做出来的)。
五、梳理自己的作业架构设计,特别是图模型构建与维护策略
实际上由于中测很弱我根本没有维护我的图……架构也是完全和规格一样。甚至我在测试过程中发现直接 return 1也可以是有效作业……实在是没有什么好写的。
总而言之,由于自己没有规划太多的时间,即使作业很简单,做出来的作业还是存在很多问题。我唯一的收获就是弄懂了什么时候使用HashMap比较好。
浙公网安备 33010602011771号