OO第四单元总结

一、本单元架构设计

第一次作业

本次作业要求解析UML类图。只要理解了其组织形式,本次作业难度并不大。

我将元素分类后分别进行储存,并用自己的类来创建其对象以便更好地体现不同元素间的关系。为了降低时间复杂度以及处理重名情况,我采用了ArrayList+普通Hashmap+Hashmap中嵌套ArrayList的形式,同时在类似寻找顶级父类这些需要查询父类相关元素的时候,遍历一次之后会记录该路径上所有类的顶级父类(或其他相应性质)。因此测试的时候时间复杂度并无问题,不巧的是有一个输出忘记了去重导致强测WA了一个点。

第二次作业

本次作业加入了状态图和顺序图的解析,同样的,理解以后并不难。

本次作业代码是在第一次作业的基础上修改而来,总体思路与第一次一样。由于状态图和顺序图持有的元素并不是很多(或者说有很多没用),对它们的处理也比类图简单。不过我把对这三种图的查询全放进了一个类里,因此显得很臃肿(其实是因为要考试所以只想图个简单)。

第三次作业

这三次作业的类图基本相似,本次作业的UML类图如下:

这次作业增加了有效性检查。幸运的是我的架构对有效性检查非常适应,因此简单地修改一下就可以完成第三次作业。对于名字为null等检查,我在给元素分类时即完成,不过检出错误时并不是直接抛出异常而是会做标记,以便在适当的时候抛出异常。诸如循环继承之类的检查利用原有方法稍作改进即可。本单元后两次作业强测均无问题,非常舒服。

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

第一单元

整个OO作业中我只重构过两次,没错,就是第一单元的第二次和第三次。在第一单元时由于刚开始上OO课,在第一二次作业中我所采用的几乎都是面向过程的方法,导致代码惨不忍睹。第一单元第三次作业是我真正理解面向对象的开始。这次作业动手前我考虑了很久设计问题,最后漂亮地完成了此次作业。从此以后拿到作业我都会先考虑架构问题。

第二单元

本单元的主题是多线程。出于性能分的考虑,本单元非常体现架构的重要性。在这个单元中也学到了一些设计模式,我在作业中采用的就是生产者消费者模式。对同步问题的处理、对性能的优化等等,在考虑这些问题的同时,我对面向对象以及架构的理解也越来越深,设计能力也越来越强。

第三单元

从这里开始OO基本就进入养老模式了。这个单元与其说是考验架构设计,不如说是用来理解别人的设计。本单元的任务以JML的形式给出,因此在架构上并没有多少可以说的。我觉得更重要的是通过JML来理解别人的设计思想,并思考自己如何优雅地完成JML给出的任务。

第四单元

本单元考察的是UML的解析。我个人认为本单元的架构设计并不难,毕竟元素间的关系就摆在那里。学完本单元,OO课程也就结束了。到第四单元时我已经能够比较准确地理解需求并将其抽象,根据其来设计自己的架构。这也是多亏了一学期魔鬼般的OO作业。

三、四个单元测试理解及实践的演进

第一单元的测试基本上是靠手捏数据。自己考虑一些易错情况,并结合一些普通数据进行测试。虽说这样效率很低,但是由于手捏数据比较有针对性,本单元没有出现强测炸掉之类的大问题。

第二单元的测试就不能靠手捏数据了,因为无法把握输入时间,不能进行即时输入,于是不得不用程序来代替手动输入。除此之外我也尝试了用程序生成随机数据并判断结果的正误,取得了良好的效果。

第三单元由于比较简单,我采用的是瞪眼法+手捏数据的形式来测试。同时我也用Junit对一些比较复杂的方法进行了测试,并与他人进行了对拍。同样取得了良好的效果。

第四单元的测试与第三单元类似,也是采用的瞪眼法+手捏数据的形式,同时与他人对拍。这个单元我做的测试比较少(因为要考试、要复习),不过还是覆盖了我认为的易错的情况。幸运的是第四单元也没有出什么大问题。

四、课程收获

首先,OO课让我实现了从面向过程到面向对象思想的转变,这是肯定的。前面也说过,现在的我已经能够实现一定的抽象并据此来设计自己的架构。OO这一个学期都在强调架构,我也深刻理解了设计架构的重要性。可以说java只是OO课的一个载体,只是我们用来完成作业、辅助理解课程的工具,真正重要的是掌握其所传达出的思想。

学完一学期的OO,我从当初的一无所知,变成了现在的理解了多线程、设计模式、UML等一系列可能跟我未来有很大关系的知识。同时其魔鬼式的作业也让我的技术水平(或者说工程能力)有了很大的提高。

五、改进建议

  • 实验课做完了就是做完了!没有任何反馈呀!起码把答案告诉我们呀!要不然不知对错学习效果会打折扣的

  • 指导书有时候有些地方说得不清楚,希望编写指导书时认真考虑一下。虽然我知道这一定程度上是无法避免的,不过这里我特指类似第四单元最后一次指导书的这种问题。前面几次的指导书是在一些细节地方可能说的不清楚(但是不会影响下手,最多就是做一些简单的修改而已),这也是没法避免的。但是这次的指导书有很多大问题并没有说清楚,可能直接造成无法动手的后果(虽然后来讨论区里都提到了,但是我认为与其这样不如一开始就在指导书里说清楚)。

  • (小声地说)JML单元的博客作业感觉有点不太合理。其要求使用的都是不完善、难以部署且使用体验极差的工具来对自己的代码进行分析,折腾半天还不一定能折腾出来。我觉得是不是可以删掉这部分,改成做一些其他的任务。

六、线上学习体会

线上学习感觉对OO的影响不大。作业有问题基本上都在讨论区交流、解答,实验课几乎没受到影响,研讨课大家都很乐意分享,效果也不错,理论课虽然无聊了一些但是可以反复观看,没弄懂的地方可以再学一遍。就是强制讨论的制度有点令人发虚(因为我在OO之后还跟着一节课,万一碰到难一点的思考题简直进退两难)。

posted @ 2020-06-15 10:33  6yyh6  阅读(218)  评论(0编辑  收藏  举报