2021面向对象第四单元作业
Posted buaaboy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021面向对象第四单元作业相关的知识,希望对你有一定的参考价值。
面向对象第四单元小结
一.架构设计
第一次作业
在本次作业中,采用MyUmlInteraction类来实现代码的主体功能。
第二次作业
在本次作业中,采用MyUmlGeneralInteraction类来实现代码的主体功能。
本次作业出于懒惰,直接将类图、状态图、时序图放在了MyUmlGeneralInteraction这个类中实现,导致了这个类出奇的臃肿。这样的行为应当避免。
第三次作业
在本次作业中,采用MyUmlGeneralInteraction类来实现代码的主体功能。
本次作业由于第二次作业的稀烂的架构,被迫沿用三图合一的类,另外采取了一个我觉得比较好的和一个我觉得比较不好的架构设计:
好的在于新建了一个MyReader类专门负责读取数据,在MyUmlGeneralInteraction的构造方法中只需要将MyReader中的容器进行传递即可。
不好的在于将规格检查放在了MyUmlGeneralInteraction类中,导致了MyUmlGeneralInteraction类的过度臃肿。实际上新建一个MyChecker类或许会更好些?
二.架构设计及OO方法理解的演进
第一单元
现在回头看我第一次作业写的Java代码,毫无架构的优雅性可言,是一个一个类到底的代码。而在第二次作业面临被迫重构后,才真正地认识到了架构地重要性,才开始感悟属于面向对象的设计方法。捕捉不同元素之间的相同与不同,配合以继承/接口/多态,这正是第一单元中我在架构上最大的感悟所在。
第二单元
第二单元主要的架构设计在于电梯队列、乘客的分配,主要是要保证线程的效率和安全性。
线程的架构一定要把安全放在第一位,要尽量避免死锁的发生。
第三单元
本单元应该没有架构可言...?
第四单元
第四单元的架构我觉得比较合理的架构是做到将不同功能单独抽成类,比如读数据的类,检查格式的类,类图的类,状态图的类等等,对于MyClass和MyInterface这种比较相似的类可以用一个接口封装共性的方法。
三.测试理解与实践的演进
在测试上,最开始我并没有花很多心思,所以强测和互测时而有bug产生。
从第三单元开始,开始觉得还是写个评测机出来避免强测爆炸比较好,于是用Python写了一个可以自动生成数据并且自动对拍的脚本。
同时,在第三单元学习了JUnit的使用,并且在一次研讨课上分享了关于JUnit的知识,让我对这门测试工具也有了深刻的认识。
总的来说,以后的测试方法不会再像之前一样用手输入了,取而代之的是轻量级的JUnit或者是覆盖面较广的自动评测机。不过,测试终归是测试,不能覆盖所有的数据,真正应该做好的还是避免代码有bug。
四.课程收获
平心而论,OO是门好课。
无论是老师的授课、助教学长学姐的工作态度还是课程的“作业-中测-强测-互测-BUG修复“的体系都没有让人失望。
想寒假的时候,我还完全不会Java这门编程语言,而现在,我已经用Java写完了十六次作业,和Java一起面对了表达式求导、多线程电梯、JML、UML等复杂的问题。同时,我还学会了Git这门超级强大的版本控制工具,还有用Python写出来的自动评测机。当然,最重要的不是对Java这门语言的掌握,而是如同老师所说的,对面向对象思想的理解与认知。对这种优秀的程序设计思想的了解才是我这门课最大的收获。
收获之余,还要感谢这十六次作业一路一起同行的刘俊一、徐一笑、胡明博、罗杨一飞、曾畅、裴宝琦等同学,一路上大家一起对拍、debug、讨论分析,也让这坎坷的OO之路变得平坦起来;同时,还要感谢助教乔盛业学长、助教陈文东学长、谭幸学长、吕佳高学长,在我面对困难的时候给了我帮助和解答,帮助我解决了不小的问题。
学习OO的过程真的收获满满,衷心希望这门课能够越来越好!
五.课程建议
- UML单元可以像JML单元一样给个指导书,便于同学们更好更快的理解。
- 感觉训练部分存在感极低,可以突出训练部分的重要性。
- 每周提前一点发布作业或许是个不错的选择?比如周三中午12:00,这样周三下午的空闲时间就可以写OO了.
以上是关于2021面向对象第四单元作业的主要内容,如果未能解决你的问题,请参考以下文章