微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OO-第四单元及课程总结

架构设计

本单元要求写一个UML图的解析器,比较复杂的将UML图解析成每个UMLElement元素已经由官方包实现,我们只要对解析好的元素进行组织和编辑即可。

类图如下:

第二次作业加了新的模型种类,第三次作业加入了错误UML的判断。基本架构不变。

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

  • 第一单元:第一单元为表达式求导。由于是第一次接触面向对象课程加之java使用地不熟练,第一单元完成得相当勉强。第一次作业简单的用+/-号对表达式进行切割并分别计算,不具有迭代性,因此第二次作业需要对整个程序进行重写,时间略紧。不过由于第二次作业使用了相对完备的算法,第三次的工作量少了很多。本单元是我第一次接触面向对象的思想,上来就给了我一个下马威,让我认识到第一次作业就要构建起可以迭代的大致框架。

  • 第二单元:第二单元是电梯调度。充分吸取了第一单元的教训,第一次作业就逼着自己写ALS策略,使得后两次作业轻松了许多,只需要在第一次架构的基础上加多部电梯、对电梯分类即可。本单元重点使用了多线程和锁,如何处理线程的冲突和如何避免死锁也是单元的难点。在作业过程中对多部电梯的运行策略做了很多思考,如摆渡式、贪心式,不过由于时间关系很多方法没有来得及去尝试。

  • 第三单元:第三单元是JML规格实现。主要是阅读JML规格然后实现。因为不需要自己去设计算法和框架,只要按着规格填填函数就行,所以本单元较为轻松。不过本单元对性能的要求很高,只是单纯按着规格去翻译强测性能会很差,需要采用并查集、dijkstra等高效的实现方法

  • 第四单元:第四单元是设计一个UML图的解析器。比较复杂的将UML图解析成每个UMLElement元素已经由官方包实现,我们只要对解析好的元素进行组织和编辑即可。虽说比较简单,但很遗憾始终没有通过课下测试。

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

  • 第一单元:因为对自己算法的特性和缺陷都了解得比较清楚,所以直接构造了针对样例来进行测试

  • 第二单元:主要用大量随机数据进行对拍。正确性方面比较好,主要检测了死锁情况有无发生。在互测阶段被极端数据卡也在意料之中。

  • 第三单元:本单元虽然简单,但非常容易犯一些细小的错误。着重关注了测试的不同方法,如对拍、JUnit、OpenJML等。

  • 第四单元:以多人对拍为主。

课程收获

经过一学期的学习,主要的收获有以下几点:

  1. 对java的使用更加熟练

  2. 初步认识了面向对象的思想

  3. Think twice and code once。程序需要具有可迭代性,这样才能减轻之后的工作量

  4. 学习了多线程相关知识

  5. 学习了JML相关知识

  6. 学习了UML相关知识

  7. 掌握了多种程序的测试方法

三个具体改进建议

  1. 课程难度梯度较不合理
    相比二三四单元,第一单元难度过大,并且第一单元从第一次作业到第二次作业有非常巨大的难度提升。这导致同学们时间非常紧张,而且对面向对象学习充满了恐惧。并且第一单元的内容可以做适当修改,同学们普遍话费了大量时间用于解析字符串,这是数据结构课的内容,与面向对象思想的关系并不大。同学们在对java尚不熟悉的状况下既要兼顾面向对象思想的学习,还要熟练用数据结构的知识显然有些不合适。建议第一单元的内容轻算法、重框架。

  2. 课下测试时间不太合理
    周三晚才开放课题略晚,可以适当提前到周三中午。周日晚10点关闭略早,可以延后到第二天上午(给大家一个通宵创造奇迹的机会)。并且课下测试的间隔略长,很多时候为了一个小bug需要等待15分钟,甚至压线无法提交。可以适当缩短到5分钟。

  3. bug修复机制不太合理
    5行的限制实在太短了。有的时候一个bug虽小,但可能改动的地方非常多。并且bug修复无法获取强测分数有些打消同学修复bug的积极性,可以适当按比例进行补分。

  4. 实验课即时给出评测结果
    每次实验课都是迷迷糊糊上机,迷迷糊糊提交,迷迷糊糊下机。因为没有结果,自己只能大致捉摸着写一个提交。甚至课下也没有给出评测结果,整个实验课就像单纯走个流程。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐