OO-第四单元及课程总结
作者:互联网
架构设计
本单元要求写一个UML图的解析器,比较复杂的将UML图解析成每个UMLElement元素已经由官方包实现,我们只要对解析好的元素进行组织和编辑即可。
类图如下:
第二次作业加了新的模型种类,第三次作业加入了错误UML的判断。基本架构不变。
四个单元中架构设计及OO方法理解的演进
-
第一单元:第一单元为表达式求导。由于是第一次接触面向对象课程加之java使用地不熟练,第一单元完成得相当勉强。第一次作业简单的用+/-号对表达式进行切割并分别计算,不具有迭代性,因此第二次作业需要对整个程序进行重写,时间略紧。不过由于第二次作业使用了相对完备的算法,第三次的工作量少了很多。本单元是我第一次接触面向对象的思想,上来就给了我一个下马威,让我认识到第一次作业就要构建起可以迭代的大致框架。
-
第二单元:第二单元是电梯调度。充分吸取了第一单元的教训,第一次作业就逼着自己写ALS策略,使得后两次作业轻松了许多,只需要在第一次架构的基础上加多部电梯、对电梯分类即可。本单元重点使用了多线程和锁,如何处理线程的冲突和如何避免死锁也是单元的难点。在作业过程中对多部电梯的运行策略做了很多思考,如摆渡式、贪心式,不过由于时间关系很多方法没有来得及去尝试。
-
第三单元:第三单元是JML规格实现。主要是阅读JML规格然后实现。因为不需要自己去设计算法和框架,只要按着规格填填函数就行,所以本单元较为轻松。不过本单元对性能的要求很高,只是单纯按着规格去翻译强测性能会很差,需要采用并查集、dijkstra等高效的实现方法。
-
第四单元:第四单元是设计一个UML图的解析器。比较复杂的将UML图解析成每个UMLElement元素已经由官方包实现,我们只要对解析好的元素进行组织和编辑即可。虽说比较简单,但很遗憾始终没有通过课下测试。
四个单元中测试理解与实践的演进
-
第一单元:因为对自己算法的特性和缺陷都了解得比较清楚,所以直接构造了针对样例来进行测试
-
第二单元:主要用大量随机数据进行对拍。正确性方面比较好,主要检测了死锁情况有无发生。在互测阶段被极端数据卡也在意料之中。
-
第三单元:本单元虽然简单,但非常容易犯一些细小的错误。着重关注了测试的不同方法,如对拍、JUnit、OpenJML等。
-
第四单元:以多人对拍为主。
课程收获
经过一学期的学习,主要的收获有以下几点:
-
对java的使用更加熟练
-
初步认识了面向对象的思想
-
Think twice and code once。程序需要具有可迭代性,这样才能减轻之后的工作量
-
学习了多线程相关知识
-
学习了JML相关知识
-
学习了UML相关知识
-
掌握了多种程序的测试方法
三个具体改进建议
-
课程难度梯度较不合理
相比二三四单元,第一单元难度过大,并且第一单元从第一次作业到第二次作业有非常巨大的难度提升。这导致同学们时间非常紧张,而且对面向对象学习充满了恐惧。并且第一单元的内容可以做适当修改,同学们普遍话费了大量时间用于解析字符串,这是数据结构课的内容,与面向对象思想的关系并不大。同学们在对java尚不熟悉的状况下既要兼顾面向对象思想的学习,还要熟练用数据结构的知识显然有些不合适。建议第一单元的内容轻算法、重框架。 -
课下测试时间不太合理
周三晚才开放课题略晚,可以适当提前到周三中午。周日晚10点关闭略早,可以延后到第二天上午(给大家一个通宵创造奇迹的机会)。并且课下测试的间隔略长,很多时候为了一个小bug需要等待15分钟,甚至压线无法提交。可以适当缩短到5分钟。 -
bug修复机制不太合理
5行的限制实在太短了。有的时候一个bug虽小,但可能改动的地方非常多。并且bug修复无法获取强测分数有些打消同学修复bug的积极性,可以适当按比例进行补分。 -
实验课即时给出评测结果
每次实验课都是迷迷糊糊上机,迷迷糊糊提交,迷迷糊糊下机。因为没有结果,自己只能大致捉摸着写一个提交。甚至课下也没有给出评测结果,整个实验课就像单纯走个流程。
标签:OO,课下,作业,面向对象,课程,UML,bug,单元 来源: https://www.cnblogs.com/NoMansLand/p/14933883.html