OO第八次作业

  学期过半,我们OO课也迎来了第二次总结。在这次作业之前,我们经历了三次难度比之前大得多的作业的洗礼。三次作业都是多线程相关,现在此做出总结报告如下。

  三次作业来的设计策略及其变化

  这三次作业基本重心都在与多线程的设计和程序本身的考量,并且后两次作业甚至已经不再对输出的格式作出任何要求,所以重心基本全部在程序本身的设计和bug的改正,第七次作业还有个重心在于如何使用程序进行bug查找。

  第五次作业:多线程电梯

  这是我们第一次多线程作业,难度也是很大,是在之前两次电梯作业的基础上增加对多线程的要求,并且由一个电梯变成了三个电梯操作,时间也改为了从系统中获得。电梯作业本身就需要对大量可能出现的细枝末节的bug进行排查,这次加入多线程和系统时间要素之后所需要注意的bug量再次激增,所以程序也有大量的问题,不过做到基本的有效输出应该是不难的。

类图如下:

(由于类图较大,一些类并没有在图上直接与Thread1关联,所以就单独截出。)

度量分析:

  本次作业由于我对多线程的运用不熟练,我的电梯实际上是在有任务时被创建,没任务时就会结束线程,在下一个任务到来的时候才会再次被创建,在发现我电梯问题时,修改已经来不及,只能硬着头皮交上去了,所幸同学和助教宽容,没有直接判定为无效作业,在此之后我也决定更加认真的对待多线程的作业,并在动手之前和dalao交流下看下思路的可行性。

  

  第六次作业:ifttt

  这次作业可以说是我觉得最难的一次作业,首先这是以前从未做过的对文件的监控,所以在简单处理输入后查询了大量诸如“java如何监控文件”之类的信息,之后动手的时候发现两类问题:一是对文件的监控,一是对文件夹的监控,两者可以说各有难点,这次作业我对java程序的递归使用熟练了很多,也明白在一个类中函数使用的时候,尽量使用函数本身的参量,而不是使用类自有的参量将会对递归的使用好很多。

  此外还有对测试线程的使用,这是我们第一次使用程序来测试程序的使用。所幸指导书给了程序的书写样例,所以我们对测试线程的写法有了个大致的了解。

  本次对输出格式几乎没有任何要求了,相应增大的是readme的工作量。

  类图:

  

  指导书中特意说明了File类不是线程安全的,所以在此我们特意构造了线程安全的SafeFile类。右边的Actions是对应的多线程,每个任务对应一个多线程。

  

  第七次作业:城市出租车

  本次作业可以说是所有出租车作业的起步了,最简单的出租车,最简单的城市和最简单的调度,这次作业相比前两次作业,程序本身难度有所降低,但是这次作业麻烦的事在于对程序的测试部分,由于出租车的随机性,导致bug很难被找到和复现,这就体现出来了程序测试线程的好处了。

  

   程序bug分析:

  第五次作业,由于时间和程序结构本身的问题,程序出现捎带请求时会出现大量的问题,电梯几乎处于一个傻瓜调度的状态,只能处理独立的请求指令。后来这次假期将程序完全重写之后,捎带的问题明显少了很多,但是在电梯的选择方面还是存在问题,正在优化中。互测中,对方的问题也很明显:无法处理多行同时输入的请求等,想必都是被这次作业毒害的同学吧。

  第六次作业,自己的程序由于在之前未注意到文件夹处理的问题,后来在修改的时候修改了大量递归问题,但是最终似乎还是不能处理二层递归的问题,也就是对于很深的文件夹中的文件没有监控能力,这个bug被对方找到之后报了对应好几个bug,也扣了我将近20分。我互测的同学的程序问题则更加严重,甚至随意输入了两个回车,他的程序就crash了,而且测试线程也写得有问题,一开始我用测试线程测试程序的时候几乎没有得到任何有意义的结果,一度让我以为他的是无效作业,最后大量改正测试线程后才成功测试完毕,而且同学readme过于简略,只想着求情,我个人觉得这样是极不好的。

  第七次作业,由于测试程序有点难度,所以测我的同学似乎急着休息并未找我的bug,而我互测的对方的bug则是很明显,再一次输入多条指令后,对方出现了数组越界的crash,在互测申诉中还辩诉说这不是crash,最后找了助教说清楚了才结束。

  心得体会:

  要说这三次作业的心得体会,最能表达情感的恐怕就是一个“难”字了。第五次作业找bug完善程序难;第六次作业写程序过程难;第七次程序定位bug复现bug难。几乎除了第七次作业由于我早早就提前写了之外,前两次作业从周二早上开始就马不停蹄的在完善程序,到提交的最后一刻都不能完善掉程序,可以说是非常难受了。

  以后oo作业还是要早点将大致框架和正确结果写出,之后花更多的时间debug;还有就是在不懂的地方还是要和别人多多交流,如果一意孤行,可能就会想自己的第五次程序一样,程序构架本身就有问题,最后也完全来不及改。

  知识方面,三次作业感觉对多线程的了解和使用深入了很多很多,压力虽然大,但是学到的东西也不少。多线程的不确定性和同时性也有了更多的了解,而且对程序的设计和代码风格自我感觉也在慢慢改善,命名也更加的规律性了。

 

posted @ 2018-05-02 14:39  swordpj  阅读(127)  评论(0编辑  收藏  举报