这次作业,我刚刚开始的时候还有些迷茫,通过阅读往届博客我大概了解到,需要先初始化读入的数据。所以我首先将三种图都进行了初始化,初始化其实就是将图进行分层次,先对同层次的元素类型进行构建,从高到低,初始化完,相对于就把图给建好了。然后就是各种查询,我将各种查询的主要部分都放在了图的类中,而不是放在Implementation中,因为图的结构完全存于class、interaction、region三大类中。
我的最终代码层次如下,其中将类图和顺序图的初始化拿出来了,主要原因是——超500行了...其实软件包中的一些类并没有什么作用,可以直接使用官方包封装的Uml,但是由于烤漆,我在后两次作业中并没有去改变。
第一单元其实给了我很大的恐惧(对OO这门课的恐惧),因为是第一次接触java,只在pre中对语法有一些初步的认识。当看到第一次作业时,我完全不知道如何下手,尝试用预解析方式但是又不甘心分数被折算90%,后来在实验课的基础上,我有了一些感觉,还有就是同学给的三句话“先去空格”“去+-”“解析”,突然让我对这次作业豁然开朗,然后花费了小半天的时间解决了第一次作业。由于第一次作业的结构还比较好, 后两次作业没有进行重构,而是在原来的基础上继续添加功能。到第三单元的时候,我感觉自己写出的作业已经比较完善了,有了一些层次化的感觉。我想这也是课程组所希望我们在这个单元学到的吧。
这个单元主要是多线程的电梯作业,其让我对多线程有了更多的了解,从完全不懂到最后写出一个较好的花式电梯确实让人成就满满。我认为自己已经对死锁有了充分的了解,知道死锁是如何产生的,并且自认为自己不会发生什么死锁问题,但是当它在我面前出现的时候,“原来这样也会死锁!”让我措手不及。这次个单元的作业,也让我深深认识到了做测试的重要性,第一次作业并没有多大难度,并且我提前复习了多线程知识,自认为写得比较顺利,但是第一次作业却因为测试不充分导致巨大的问题,让我非常难受。但同时也让我开始学着写测评机。虽然第一次写的测评机可能还不是很好,但是已经可以基本实现自动化测试了。
本单元相比前两个单元是最轻松的一个单元,在这个单元中我对JML规格有了较为清晰的认识,还记得老师上第一节JML规格课的时候我并不是很能理解它是干啥的,通过不断阅读JML手册理解基本语法后,接下来的工作就是按规格写代码,有些死板,但是确实在这个单元中,由于JML规格指导书的歧义少了很多(甚至几乎没有)。本单元最后的博客作业还让我们自己进行JML规格的撰写,我也从中发现,相比于看JML规格,写出一份完整的JML规格需要非常严谨和认真(比看JML难多了...)。
这个单元主要是想让我们更清晰地理解类图、顺序图、状态图,当我们遇到它们的时候能够理解它们。相比于直接让我们画,我认为这个单元的作业让我更好地理解了这些图的结构,因为我需要在init的时候对其进行层次化,将其一层层嵌套,理解其中不同元素的关系。这次的作业可能没有第三单元那么多的数据结构了,但是需要我在对UML图的理解上下功夫,其实理解了图的关系,初始化之后的查询比第三单元还简单。
第一个单元的时候我还不会搭建测评机,我的数据主要来源于手搓边界数据和朋友对拍。到第二单元的时候,由于第一次作业的打击,我开始尝试构造测评机,这也是我第一次开始构造测评机,可能还有些拙劣,但是可以基本实现自动化测试。在第三单元的时候,我偶然发现了wzk学长的测评机(谢谢学长),我进行了稍微的改动使之符合我们这次作业的要求便投入使用,不得不说学长的测评机使用感好好...其把测评和数据分成了两个份代码,使得测评部分代码可以重复使用,只需要更改数据生成部分便可以投入别的测试。
本学期的OO课大大大大大大提升了我的代码能力,同时也让我对一些设计模式有了更深的理解,还有就是在撰写代码前考虑其可扩展性、可迭代性。可能刚刚学完OO,我也说不出太多的感受,毕竟现在的它在我的眼里还只是一门课程,但是我相信,在我未来的计算机生涯中,有无数需要它的地方,那时候我可能就能明白这门课对我而言的意义之大了吧。
引用牛助教的一句话:等着吧,好日子还在后头呢!