buaa_oo_第四单元总结

总结本单元架构设计

  本单元第一次作业时,对于这种开放类型的作业有些迷茫,又很难将具体的UmlElement和UML图中具体的元素进行对应,所以我选择先阅读了几个学长的架构,参考照葫芦画瓢的完成自己的架构。阅读的过程中,我发现普遍采用的方法是创建自己的新类继承官方包中提供的各UMLElement元素,在新类中创建容器等属性保存逻辑上的元素关系,在新类中创建方法以承担implement传来的查询指令。实际工作都在各具体类中完成,实现的implement只不过参与解析转换元素和传递指令至具体类。后续的两次作业中加入了状态图和时序图,认为最好的方法是将其拆分为三个类,ClassDiagram,stateDiagram等分别保存图内元素和方法,这样元素的归属更加清晰,架构也更简洁。但由于临近考期准备其他科目,还是延续了初次架构,将指令查询,保存全体元素,解析功能都放在了实现的Myimplementation中,导致最后一次作业检查逻辑非常混乱,对于某些element的归属判断比较混乱,在本单元架构上还是存有遗憾的。

 

 

 

 

 

总结四个单元中架构设计思维及OO方法理解的演进

  还记得第一单元面对OO课程时焦头烂额,万分苦恼的景象。当时对课程工具课程环境都不是很熟悉,尤其是git的使用,预习作业虽然完成,但并没有上传评测,因为不会用git。于是正常授课时就觉得被别人拉了一大截,自己啥也不会。第一次作业时给自己下目标认为礼拜四中午初测前必须完成。花了礼拜二,礼拜三两天时间苦想如何完成对表达式的解析以及具体架构,最后还是没能挑战成功,草草用了预解析方式,周四实验课睡眼朦胧,觉得它的解析,架构十分巧妙,但又误认为不能抄袭实验代码不能运用,最大的原因是自己摆烂不愿看。互测时通过阅读别人代码初步了解了解析表达式的方法,但还是没能学通透,后续两次作业加难度以后还是不能独立完成解析的方法,于是又选择了预解析的方法。对于架构的认识更是非常蠢,认为git只能传一个文件,就把所有类写进一个java文件,在主类里虽然不是C的一main到底,但是是一主类到底,所有方法都放在主类里,一个主类几百行,现在想起来真是非常蠢。当时浑浑噩噩,觉得自己这学期是一定学不好OO了。

  第二单元鼓起信心重头开始,这个单元开始第一次认识到阅读实验代码和往届学长博客和代码的重要性。我的架构基本是学长和实验代码的杂糅体,不过通过几次阅读之后,我也能够判断一些结构的优良,在完成自己架构时,我也学会了取其精华,去其糟粕,对架构进行自己的改进,第一次作业参考较多,后续两次作业补充架构我几乎都是独立完成,力图架构的简洁清楚,并且对自己的架构比较的满意。第二单元的OO课程应该说是我本学期最开心的时段,终于改变了过去哈也不会只会预解析的苦恼,终于入了OO课程的门,公测成绩也比较满意,性能分也不错。

  第三单元是JML规格的学习,这个单元架构乏善可陈,只需要实现提供的接口即可,这个单元重点是方法的书写和完成,通过JML规格语言,我第一次明白了原来方法的作用能够用这种方式表达的如此清晰,其对于传入参数边界量的处理也让我啧啧称奇,各类方法间参数的传递也让我觉得很奇妙,原来可以这么完成各类间的交互合作,在宏观类上稍稍调用下层类即可,底层类方法的实现又因为无需考虑过多层次而变得简洁,觉得很神奇又学到了很多。

  第四单元开放性架构,还是选择参考了学长的架构考虑,还是很遗憾没有将几个类图,状态图分别建类使得架构更简洁清晰。在方法的书写上参考了上一单元,尽量将具体实现放在了底层,上层只进行逻辑调用,书写过程十分清晰。

总结四个单元中测试理解与实践的演进

  第一单元没有入门,万分苦恼,选择的又是预解析方法,觉得都用上这种方法正确性上应该不会再有啥问题吧,对程序的测试以及互测用例都没有超过三五条。屋漏偏逢连夜雨,这几次的强测正确性都不行,性能分也不是很行,想来还是没有经过多少测试。

  第二单元决心改头换面,对程序做了长足的测试,互测也用了十几个样例,并非是编程生成的随机情况,而是自己绞劲脑汁想出的边界样例来测试程序,相较于上一单元,本单元测试用例不可不谓充足,结果无论正确性还是性能分都有了很大提高。

  第三单元是JML规格测试,对方法的执行效果和异常有了充分的说明,我吸取上一单元的成功经验,一条一条耐心的构造样例,确保包括了绝大部分情况。本单元强测的正确性也很好。

  第四单元由于疫情缘故隔离归家,在家注意力和时间上都些许不足,对于学习没有那么上心,同时本单元的用例比较难构造(有时候不能理清uml图的画法以及图上元素转换成了代码的哪些元素),对测试不甚用心,导致本单元的强测水平又跌宕起伏来到谷底,还是有些许懊悔。

总结课程收获

  除了学习了基本的面向对象知识以及架构,方法等书写。我觉得收获最多的地方一是阅读代码的能力,无论是互测时找其他同学代码疏忽点,还是参考往届学长架构,或是实验课上完成代码填空,都需要大量的阅读代码,一开始面对长篇大段很抗拒不愿看,被逼无奈读下去(自己不会架构或是实验要求),慢慢看着看着有了心得,甚至有时候通过联想等阅读几个关键地方就能看懂目的看懂一大片,感觉自己看代码还是很有天赋?(还是因为终于知道按CTRL能到对应代码段。。。)无论如何这学期通过OO课程阅读代码的能力确实有了长足的提升。

  二是个人心态方面,面对不熟悉的难题不应该抱有抗拒逃避心里,找到老师助教帮助解决情况会好很多,面对难题单兵作战也不是个好方法,无论是同学讨论还是参考往届博客往往都能事半功倍,短时间不懂不会也没必要过分伤心丧失信心摆烂放弃,面对新单元重拾信心还是能弥补之前的缺漏,不应自怨自艾认为自己一定学不好打上思想钢印。

三个具体建议

  1.第一单元研讨课时可以设一个专门小组和助教讨论一下不太明白架构,作业的具体处理等。

  2.博客总结的UML架构图不需要画方法属性(莫非本来就不需要?)

  3.checkstyle的长度检测适量放宽?(喜欢用长变量名真的好难)

posted @ 2022-06-24 18:50  buaa_zzy  阅读(13)  评论(1编辑  收藏  举报