OO第四单元总结&结课总结

一.本单元作业架构设计

第一次作业:只需要解析类图,没考虑太多架构上的事,全写在一个类里面了,算法实现采用的是在构造方法里直接对元素分类,然后在后面的函数取元素时直接在对应的列表中取。

第二次作业:比第一次作业简单,但是这时新增要求解析状态图和顺序图,并且有一个总的类来管理,此时我新建了3个类MyClassModeInteraction,MyUmlCollaborationInteraction,MyUmlStateChartInteraction分别实现类图,状态图,顺序图的解析,总类里实例化这3个类的对象,对应的方法直接调用相应对象的方法即可。

第三次作业:这次作业比前两次难,虽说构架不用再考虑了,可以直接沿用第二次作业的,但是这次作业的算法有一定的难度,取决于最初的构架与优化程度,我的构架不如别人建树好,只能当做图来进行遍历,和上一个单元类似,部分算法也沿用了上一单元的想法,对函数进行了较为合理的实现。但是这次作业的难点我认为还是在对错误的理解上,我在强测中就因为对第一种错误理解不当,错了一个点。

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

第一单元:这时候刚开始学面向对象,说实话啥也不懂,当时就按自己的思路,把项分类,分成指数函数类,三角函数类等等之类的,到第三次作业时,自己觉得构架还行,但是由于刚开始学面向对象,没太考虑程序的可扩展性,第一次作业就只实现第一次作业的要求,第二次作业就只实现第二次作业的要求,没给作业的迭代开发留出余地,所以第一次作业就进行了两次重构,非常痛苦,也得到了教训与经验。

第二单元:这一单元是电梯作业,在编程时指导书给了很多提示,构架也主要采用生产者消费者模式。这个时候也开始考虑迭代开发的问题,由于第一次作业调度并不复杂,所以我写得也很简单,到了第二次作业时也进行了重构,改了很多地方,使得代码能适应多部电梯运行。第三次作业在第二次作业的基础上主要改了调度算法,改动还是挺大的,主要是电梯结束很难控制,我最后也搞不太清。不过对多线程的理解也深了很多。这个时候对代码的可扩展性理解了很多,但是类之间的耦合关系还是很强。

第三单元:这单元学JML,构架之间就抄了接口的,算法实现时采用缓存的机制,每次有新人进入或有新关系加进来就更新数据,防止查询数据时超时。且这单元的第一次作业过于简单,导致没考虑太多的性能问题。在进入到第二次作业后,我虽然对算法进行了优化,但是在最初的构架里,我采用的列表存的数据,而不是hashmap,这导致我的查找时间非常长,强测时很多点都没过,后来经别人提醒才改用hashmap存数据。第三次作业主要难在算法,很多对图的操作都不熟练,很多概念和算法都是现场去网上学的。这单元我体会到了JML的书写和代码的实际实现真的有很大的差别。

第四单元:这单元学UML图,构架也很简单,在前面提过就不重述了。

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

第一单元:第一单元难度较大,测试难度也大,主要测试是根据代码实现来测试的,当时测试全靠手动构造,这样当然覆盖不是很全,很多测试思路也是去讨论区看看别人的想法,再结合自己的代码进行测试,而且此时有性能分,我自然想多得一点,但是在优化过程中引入了新bug,测试难度也大了很多,感觉得不偿失。

第二单元:多线程测试比第一单元更难,前两次作业的调度还不是很复杂,但是到第三次作业就很难了,而且由于多线程的不确定性,每个测试代码得跑好几遍看看会不会出问题,有时候出了问题也很难找。前两次作业靠着手写测试代码还能过得去,但是第三次作业就力不从心了,所以我借用了别人的自动测试代码,第一次尝试自动测试,也开始学习自动测试,发现对这一单元的测试真的很好用。

第三单元:这单元的测试在指导书里给了提示,可以使用junit进行测试,我当然听指导书的话,用起了junit,虽然这单元还是用的手动测试,但是junit还是挺好用的,能针对每个函数进行测试,极大的降低了测试和debug的难度。

第四单元:这单元太简单了,我全用的手动构造的测试,顺便熟悉画UML图,最后也没啥粗心的漏洞,只因为理解问题而出现bug。

课程收获:

  这学期真的收获了很多,首先是自己的编程能力得到了极大的提高,更有自信了;其次是学习了java这门面向对象的语言,第一次了解到了面向对象是个什么东西,体会到了面向对象的封装,继承,多态的优势与便捷;另外还在一定程度上掌握了多线程编程的技巧,了解了JML的相关知识,学会了读和画UML图。学了这些东西感觉自己开始真正的变成了一个程序员。

建议:

1.建议在每个单元的第一次作业时,稍微透露点后面两次作业的要求,这样我们好考虑代码的可继承性,重构太痛苦了;

2.我觉得还可以把每次作业的难度分配得均匀一点,我感觉每个单元的难度是第三次作业 > 第一次作业 > 第二次作业,感觉可以把第三次作业的一些要求移到第二次作业去;

3.每个单元的总结博客如果要用到新的插件或者软件啥的,能不能出个教程或者挂个链接,有些东西自己上网不太好学。

线上学习体会:

  这学期的线上学习感觉还不错,就是每次课后都有课堂作业和课后讨论,感觉作业变多了,而且讨论在群里进行也不如在线下的课堂进行,还是有些遗憾,而且每次周三的讨论课不面对面交流感觉效果也没那么好。不过在腾讯课堂里学理论知识还是一点都不耽搁,每次学完就能在当周的作业或实验课活学活用,感觉挺好的。

posted @ 2020-06-15 23:12  袁昊宇  阅读(167)  评论(0)    收藏  举报