北航2020OO第四单元博客作业&期末总结

一、本单元三次作业的架构设计

本单元的三次作业由于都给了接口,所以架构设计相对比较简单。

第一次作业架构非常简单,只是构建了MyUmlInteraction类,并实现对应的接口,然后编写方法即可。

第二次作业由于新增了较多方法,如果全部在一个类中实现势必要超过长度限制,所以我使用了MyUmlClassModelInteraction,MyUmlCollaborationInteraction,MyUmlStateChartInteraction三个类进行具体的方法实现,在MyUmlGeneralInteraction类中使用上述三个类的对象。

第三次作业在第二次的基础上增加了错误检测,所以新增了MyUmlStandardPreCheck类实现相关接口来保证错误的检测。

二、我在四个单元中对架构设计和OO方法理解的演进

第一单元

由于是第一次接触OO课程,思维还有些停留在面向过程,导致第一单元的架构设计不太理想,第二第三次作业都进行了重构。对OO方法的理解也比较肤浅,只知道类是什么,方法是什么,具体的使用还是有点面向过程的痕迹。

第二单元

第二单元的多线程电梯比较考验架构的设计,如果架构的好不仅可以迭代开发,还可以有效的提升性能。我认为我本单元的架构设计还是可以的,虽然性能不是特别好,但是至少不用重构,可以比较轻松的在第一次作业的基础上完成第二次第三次作业。在这个单元中我也学习到了有关多线程的知识,这是与之前面向过程截然不同的体验。

第三单元

第三单元的主要内容是JML的学习,在作业中由于JML和基本的架构都已经给出了,所以基本上不需要进行架构的设计,只需要完成方法即可。这个单元我学到了JML的有关知识,学习了JML语法,更重要的是了解JML的理念,契约式编程。

第四单元

第四单元的架构设计同样约等于没有,只是简单的完成需要完成的方法即可。这个单元的重点我认为并不是代码,而是让我们对UML有一个更全面的理解,学会使用UML。

三、我在四个单元中测试理解的演进

第一单元

第一单元的第一次作业我基本上没做太多测试,只是过了中测随手测了几个数据,导致强测吃到了苦头。第二次第三次作业我借鉴了评论区同学的方法,使用Python的第三方库进行求导的运算,随机生成数据,做了一个微型评测机,效果还是不错的。

第二单元

第二单元由于自动评测的实现难度比较大,我主要采用了手动编写一些比较特殊的数据进行测试。总体来说覆盖的比较全面,没有出现bug。(但是性能分就有点惨不忍睹了)

第三单元

第三单元我使用了Junit来编写了一些单元测试,但是我感觉在编写单元测试的时候也有可能出现考虑不周全的情况,所以主要还是编写一些数据手动测试,效果还不错。

第四单元

第四单元由于大部分代码都是给出的,只是需要补充一些方法,所以我采取了逻辑验证为主,附加一些数据测试的方法。由于理解有些问题导致第一次作业的图遍历被当做了树遍历,tle了一个点。剩下的作业效果还是不错的。

四、课程收获

  • 学会了Java的基本语法
  • 多线程的原理
  • UML和JML相关知识
  • 可以初步的进行测试自己的代码
  • 对面向对象的理念有了一些理解

五、三个具体改进建议

  • 我建议实验课可以提供线上的测试,现在的实验课有一种盲人摸象的感觉,由于时间限制肯定是采取补充代码的方式,这就导致我们对已有代码没有具体的了解,即使给出了需求也有点迷茫的感觉,再加上没有测试的反馈,大家都比较担心自己做了一通结果完全走错了方向。我建议稍微提供一些课上的测试,也可以提前给出代码让大家熟悉,到时间再给题目,这样会更清晰一些。
  • 我建议研讨课可以改革一下,感觉目前的研讨课大家都不是很积极的报名,同学们听的也不太有积极性,出现“会的不用听,不会的听不懂”的尴尬情况。而且我感觉我们课程能讲的点也比较少,建议研讨课新出一些题目让大家讨论比较好
  • 我建议后两个单元可以适当调整一下。感觉现在的作业重心完全是在算法上,我写作业的时候也是,implement接口之后就只需要考虑怎么实现算法就行了。感觉难度比第一第二单元要低。(我也不太理解为什么第一单元是最难的)

六、线上学习OO课程的体会

我认为线上学习OO课程比较合适,因为本来这门课大部分的时间也是在电脑上完成的,不用线下上课也正好可以方便听到哪里就实践一下,在家学习也可以比较专注的写代码。总而言之这学期的OO课程十分令人满意。

原文地址:https://www.cnblogs.com/C9H13O3N/p/13137935.html