OO第四单元小结 + 课程总结

一、第四单元架构设计

  总的来讲,第14次作业的架构设计是我自己感觉在历次作业中设计得最合理也最好的。第13次作业因为内容较少所以没有什么,而第14次作业是我到目前为止写的最舒服的一次。

  1.第13次作业

  这次作业总的来讲比较简单,没有什么bug。架构方面也是比较无脑,我处理得比较好的地方是为自己新建的两个类实现了一个统一的接口,减少了非常多的代码量。

 

  整个程序的循环复杂程度和耦合度已经比较低了。架构也比较简单

  2.第十四次作业

  这次作业架构设计的合理可能的原因就是多开类和分包了吧(在下面第二部分详细讲了)。对比第11次作业有三个图,这次也是有三个图,但是这里处理共享资源的方式就比当时妥善的多了。当时是没有实现接口,几个相同的方法也是在几个类之间都分别实现了。这次实现了一致性的接口,特殊的地方重写处理,工作量少了很多。另外分包处理了每个图,可能这次作业的一个包就是第11次作业的一个类,所以不管是代码上还是逻辑上都清晰了很多。

  已经比之前好了很多了。

  另外由于是三个类似的图,所以对每个包的操作也基本相同。

  期间出现了几次bug,这样的结构设计找bug一旦有了数据是真的快。主要还是得益于这两个单元给的官方包里面的代码结构吧。看了这两次官方包的代码结构感觉学到了很多东西。

二、架构设计&&OO方法理解

  就我个人而言,感觉现在和之前的设计最大的一点改进就是昂神所说的,“别怕多开类”。我感觉自从自己多开了类之后,整个代码风格清爽了许多,当然,最初的时候程序的耦合程度还是很高的,慢慢地减少了一些不好的习惯,妥善设置参数以后,现在已经降低了不少。另外一点就是多开方法。我最初的时候还觉得课程组设置的这个限制方法行数真的很鸡肋,因为命名一个函数写七、八十行是比较正常的事情(我的左大括号单独占行)。但是慢慢的在改代码风格的时候,感觉函数写短一些以后思路会清晰一些。从代码体验来谈,缩短方法和多开类,体验真的很好,可能是局部的思维更加清晰了,整个代码清爽无比,而且debug的时候目标也更明确,因为可控的范围就那么小。

  对于OO,比较直观的认识就是一种将一个大的问题不断细化成为可控的小问题,在将每个解决的小问题联系起来解决大的问题这种从宏观到微观,再从微观到宏观的编程思想。最为直接也最为明显的例子就是第一次作业。面对过程式的写法和面向对象的写法完全是两种不同的思路,然而可以解决的问题也不是一个量级的,面向对象式的显然可扩展性更高,可以解决的问题也更为复杂。而架构的设计过程其实也就是将大的问题拆解的过程。所以其实面向对象训练的其实也可以说是一种思维能力,而不单单是编程。当面对一个问题,我们如何去着手,如何将其分解为若干可以直接解决的小问题,其实也就有了不同的架构。一个好的架构设计必然是建立在对问题有了充分的分析之后的。对问题理解得透彻,分析得够清楚,设计的架构才有可能简洁明了。所以这若干次作业,我感觉训练的更多的是分析问题的能力吧,把这几次作业彻底分析清楚、架构设计得差不多了再动手,写代码还是很快的,而且bug很少(多线程除外)。

  对重构有了更深的理解。在研讨课上老师讲过,好的代码是需要一定的前期设计的,但是不要过分设计。这一点我也算比较有体会的。在第一次博客作业中我就提到了和计组的关联,计组教会我们的道理是设计和实现要分开。而在这个课上,血淋淋的例子告诉了我不能分太开。不要过分设计,真的很重要。有的时候重构会重新梳理思路,写出来的代码会有特别特别明显的提高,我在每个单元重构代码的时候都有很明显的这种感觉。有一些细节性的东西是真的只有写了代码才能知道的。前几次作业经常设计好几个小时,想设计出一个可扩展性强,强大的架构出来,然而实际上之前想的再好,到写的时候也发现根本不是那回事。在之前耗费很长时间去设计真的不值得,而且重构也不失为一种好的方法。

三、对测试的理解与改进

  感觉测试给我上的课最深的是前两个单元,而不是讲规格的第三单元。第一单元告诉了我,用自己的思维定式去测试,bug永远有测不到的。而第二单元告诉了我,不但bug有测不到的,还会有即测即出之后不见了的bug。之前对编程接触的极限也就是数据结构了(计组不太算,毕竟设计更为重要),代码量也小,面对的问题可能出现bug的地方也很有限。当问题突然复杂化了之后,测试的重要性才显现出来。

  在第一单元的测试是按照自己的思路随机生成数据的,感觉作用并没有很大。到现在为止,我测试最好的体验还是找几个思路不同的人互相测一测,因为自己测真的很容易有一些数据测不出来。而且在交流的过程中也是比较容易发现自己的bug的。自己测试的话更多的就是边缘数据和压力测试吧,其他的数据感觉有点看运气的成分。

四、课程收获

  课程收获最大的主要有三点吧。第一点比较直接的就是编程能力的提升;第二点就是在对OO的理解里面所说的,分析问题的角度和能力;第三点可能还有一个就是处理大量代码的能力。总体来讲课程体验还是不错的,基本上各种情况都经历过,有强测直接满分那种努力得到回报的喜悦,有大意失荆州发现自己没进互测的悔恨,也有抓耳挠腮对问题手足无措的苦恼。游戏体验十分丰富,效果非常好。最主要的收获可能还是在第二部分对OO的理解和感受中说的看待问题的方法吧。

五、改进建议

  代码风格检查里面不知道能不能给大括号单独占行的同学们一条生路。本来一个方法就只有60行,大括号单独占行的同学可能还要再少个7,8行。

  感觉课程的顺序可以调一下,uml图,规格测试这些知识性的东西可以往前面放一放,把更考验编程能力的一二单元往后放。

  数据结构的内容太多了。。。给人感觉每次的核心都和图有关。

posted @ 2019-06-24 01:26  ericliu0206  阅读(155)  评论(0编辑  收藏  举报