OO第四单元博客
1.总结本单元作业的架构设计
因为三次作业是包含关系,这里直接分析第三次作业的架构
- 在类图的查询中,我实现了 Myclass ,Myinterface 两个类,分别用来处理对类和接口的解析。还有 Ops类,用来记录函数的参数。
在 MyUmlClassModelInteraction 类中,实现对各个元素的信息读取,因为查询需要用name,而关联信息都是id,所以我的存储方式为用 arraylist 存储各个元素,并用两个 hashmap 分别建立id 到数组下标,name 到数组下标的两个映射,这样也方便进行异常检查。
- 在状态图的查询中,实现了 Mystate 和 Mystatemechine 两个类,用来记录状态和状态机。
查询操作都很简单,找到相应的状态机查询相关数据即可。
- 时序图的查询中,实现了Mylifeline 类,记录该 lifeline 接收和发出的信息。
查询同理,找到相应的 lifeline 查询消息个数。
- 新引入了有效性检查部分,这里的难点主要是 R002 和 R003 ,归到图论里面,其实就是查询继承形成的有向图是否有环和是否是一个树,因为数据量很小,都可以用 dfs 简单实现判断。
2. 总结自己在四个单元中架构设计及OO方法理解的演进
-
第一单元
第一次作业设计简单,就是建了一个多项式 $ a \times x^b$的类,把每一项分开处理,乘法项可以合并。
第二次作业出现,第一次的结构就完全不能用了,我就开始思考如何弄一个好的架构,这是我花时间最长的一次作业,最后构建了sin,cos,和函数幂三个基本类,又有项,多项式以及加减乘三个符号类,花了整整两天时间,终于通过了测试,架构我自己也很满意,我的面向对象思想初步成立。
第三次只是多了允许嵌套,直接把三角函数里面添加一个内层多项式即可,我发现好的架构增添功能就变得非常简便。
-
第二单元
是一个多线程的电梯作业,因为老师上课就提醒了后面作业可能有多个电梯,我的结构就是输入设备,调度器和电梯,调度器负责给电梯分配他要运的乘客。
第一次作业就一个电梯,调度器一股脑全分配给一个电梯就行。
第二次作业有了多个电梯,我直接平均分配,只需要改动一点点代码,性能也挺不错。
第三次作业有了不同电梯,其实只要你合理分配乘客,那么不同电梯之间的区别就是运行速度不同而已,只需要给电梯标一个类型,确认他的运行速度即可,代码改动量也很小。
这单元我就知道了一个好的架构设计对代码的日后改进和维护的重要性了,提前想好如何设计有利于改动,会为你之后减少很多工作量。
-
第三单元
这个单元介绍了JML,单元作业都是照着JML写代码,但是肯定不能完全照着JML来写,我先完整的读了一遍JML,发现这个可以抽象为一个可单人可群聊的聊天系统,里面的不少算法都可以进行图论方法的优化,写起来就更加得心应手了
-
第四单元
本单元是让我们理解UML模型,弄清他们的关联和层次关系。
我们完全可以按照从顶层到底层的方式设计架构,对每一层的元素依次进行解析。
3.总结自己在四个单元中测试理解与实践的演进
第一单元基本都是先脑补一些可能会出错的问题,如+++,多括号之类的结构,出现这些错误和数据长度无关,所以手动构造几组就好,另一类就是可能会超时的数据,这些一般都达到了极限数据范围,需要自己写一个数据构造器并经行结果检查,可惜我自己和互测时没有一个人时因为超时而错的。
第二单元就无法手动测试了,分时输入意味着必须写评测机经行测试,而且多线程可能还有不同结果,好在评论区有大佬的分享,还是能写出评测机的。
第三单元的测试,主要时超时问题的测试,需要构造最极限的数据,这些都没啥问题,可是我抛出异常的字母拼错了没有发现,这里强烈谴责中测数据居然没有覆盖到所有测试指令和可能的结果。
第四单元实在时不知道怎么写评测了,只能手动通过课程组给的jar包人工测试差错了。
4.总结自己的课程收获
这学期我收获最大的就是OO课了。首先他帮我掌握了一门语言,暑假的最后两个星期,OO课程就督促我开始课前学期,完成了预习课程的第二弹和第三弹,让我学习了一门新的语言。然后我也深入理解了面向对象的思想,知道了预先进行架构设计,这些知识对我的代码编写能力有了很大提升。同时,自己的debug能力也有了不少的提升,包括自己查错和查别人的错。
5.立足于自己的体会给课程提三个具体改进建议
1.加强中测和弱侧,我知道数据弱是为了帮助同学多算几次有效作业,但也能不能遗漏过多数据,让本有一些严重bug的代码就这么通过了,一方面对同学之后的作业改进增加了难度,另一方面也让一些同学的强测分过低。
2.调节课程时间,最后一周的作业都已经进考期了,五一的时候明明可以布置一期作业让期末更早结束,相信更多同学希望五一做而不是期末。
3.相关教程可以再详细一点,以及给一些评测机的教程,而不是让同学分享。

浙公网安备 33010602011771号