第四单元及课程总结

第一次作业

第一次作业时主要将时间花在理解UML上面,结合PPT和训练作业里面大体去理解了UML各个层次的关系。

因为第一次只有类图,因为疏懒,以为很简单,没有建立一个类来存放各个UML元素层次。导致在getClassOperationParamType中遍历的过程非常麻烦,Bug也出现了很多。

第二次作业

第二单元的顺序图和状态图和之前的类图是平行的,可以不必考虑第一次的内容。

通时我吸取了第一次作业的教训,建立了MyStateMachine和MyInteraction类,有了这两个类,只需要将一些方法写在类的里面,需要的时候直接调用即可。第二次作业的结构比较清晰,只有一个递归是小难点,所以在中测的时候提交一次便通过了测试。

第三次作业

第三次作业我也在对题目的理解上花费了较多的时间,原因可能是对UML的依旧不够熟悉,在R001上就因为查询出现了错误导致一直没有通过。然后R002是我认为此次作业最难的部分,通常情况下查询图的环只需要结果,而这次需要我们得到路径,我在深度优先遍历的基础上对每次查询的路径添加到额外的path结构中,然后再对每一条路径进行有没有环的分析。这样将其分为两个部分,便简单了很多。R003、R004也是对递归的运用,细节处略有不同,其中R004包括继承类的接口,在一开始我并没有注意到,在强测时候出现了很多BUG。剩余的几个都比较简单,遍历查询各个层次所需的内容是否符合即可。

可以看出如果建立MyStateMachine和MyInteraction就不必在MyUmlnteraction里面写很多方法了。

四个单元的总结和收获

在这四个单元中,我对一个好的层次和架构有了一定程度的认识,足够清晰的结构可以在迭代中不必修改原有部分,只需添加即可。

第一单元的求导,是正式面向对象的开始,我认为对层次的要求是比较高的,需要对不同类型的因子进行恰当的分类。第一单元还让我对Java一些东西的运用有了初步的理解,比如BigInterger,正则表达式等,作为入门,既不失考察要点,也不失基础内容。

第二单元的电梯,本身的结构还是比较好建立的,让我们理解生产者-消费者模式。可以使用调度器来分配电梯任务,或者使用自由竞争。处理多个线程的时候要注意层次,否则容易把自己绕乱。要保障同步,避免死锁以及死锁Bug怎么发现,追求效率等等。让我们能够体会多线程,并且代码效率有一个很直观的体现。

第三四单元给我最大的感受就是程序的设计是一个严谨过程,JML可以很清楚的表述需求,UML很好地表示类之间的结构和关系。JML本身写起来就要注意避免歧义,实现功能时候可以慢慢思考,选择最有效率的方法。

总的收获

自己的代码能力感觉有了很大的提升,对于曾经学过的算法也有所运用。在对面向对象方面用的还不是很熟练,以后也会多加练习。

代码的层次性,耦合度等概念在这门课上第一次接触,到现在也已经有了不少的理解。

代码风格已经被纠正了很多,类似于打一个符号一个空格已经是一种强迫症了。

遗憾的一点是本学期在互测方面做的功夫很少,没什么参与,对于如何写出较强的测试用例也没有太去理解。

了解了一些插件的使用,在写代码和事后修复的时候都有很大的帮助。

对课程的建议

我认为课程对写代码的总体能力设计的题目还是比较好的,但是一些知识点,实际运用啥的在练习所给的信息不是很多。比如第一单元,层次性非常明显,但是写起来难度也很大,建议让Pre内容减少作业量,增加相应的详细知识点。

每次对于官方包的修复与更新只有一个通知,没有对更新的简要描述,希望能够在更新时有个摘要。

讨论区还是很有帮助的,建议添加搜索功能。

可以在每次作业结束后对同学在作业难点的巧妙解决办法进行展示,提供给大家学习。

posted @ 2021-06-26 17:35  野生孜然  阅读(30)  评论(0编辑  收藏  举报