? 本单元相对来说可能是最简单的(当然如果不小心一开始在架构上走偏可能需要花时间重构),我没有设计太复杂的架构,因为课程组给的源码以及结构足够清晰,只是类的属性不太够,没办法描述树、图这样的结构。因此,我只是简单的为常用的元素设计了包装类(wrapper),添加了相互之间的关系以及缓存等。由于三次作业架构基本一样,这里只贴出第三次作业的类图。
? 架构还是比较简单的,最上方的两层都是包装类,第二层的类继承自第一层的MyUmlElement,与课程组所给的源码结构比较类似。下方的四个类中,MyUmlInteraction是要求实现的类,MyGraph是把建图的过程提取了出来,Util是一些用到的函数,Main是启动类。
? 在OO课程刚开始时,我对面向对象以及架构设计的理解都停留在很表层。比如第一单元,我就有点过度设计的感觉,虽然用了大量的继承与接口的实现,但是到最后感觉很多都没有太大作用。在第二单元时,我也需要参考别人的设计以及与别人讨论。到了最后,虽然最后一单元本身比较简单,但是我对自己的设计很满意,没有多余的东西,而且也保证了可扩展性。
? 总的来说,我从一开始的需要“刻意”设计,到现在能够快速找到简单又有效的架构,我认为我对面向对象的理解和架构的设计能力都有了很大的进步。
? OO课程的另一大收获就是测试能力的提高。
? 首先是尝试了通过程序自动化生成测试数据。在OO课程之前,我还是习惯于手动构造一些数据对自己的程序进行测试,但当程序复杂到一定程度时,自动生成测试数据也是一个很不错的方法。
? 其次是测试方法的改进。学会了利用Junit这样的单元测试框架,也学会了自己搭建评测机进行自动化的测试,这让我的测试能力有了质的飞跃。
? 当然,单元测试带来的另一个收获就是对TDD(测试驱动开发)的了解。虽然很多情况下还是难以做到在写代码之前写测试,但是每写完一个类或一个模块就进行单元测试还是可以做到,而且确实使我的程序出现bug的几率降低了很多。我觉得这是一个值得长期坚持的习惯。
? 说实话现在OO经过多年的改进,各方面以及很完善,给同学们的体验也很不错。但是实验课确实让人比较难受。首先是不知道自己做的对不对,不知道自己的成绩,这就让实验课的收获大打折扣,而且我也不太理解公布成绩有什么难点。而且我觉得实验课的出题可以改进,向正常作业的水准靠近。就比如最后两次UML的实验,我觉得题目描述的并不清晰,可能需要去猜出题者的心思。
? 当然这学期由于疫情可能影响了正常的计划,但是这学期研讨课感觉太多了,而且只局限在一个小班,可能有值得分享的东西的同学可能并不是很多,这导致大家参加研讨课的热情并不是很高。请一些真正在工业界工作的人来分享可能会更好。
? 第三单元中测的难度可以再提升一点。当然我也理解第三单元可能是鼓励大家用单元测试。
? 是否可以减少一些高级算法的应用。树、图这样的结构当然很正常,包括DFS、BFS这种常用的算法。但是,像连通分量相关的,放在OO课真的有必要吗?把重心放在架构的设计上是不是更好一点,当然这可能太难量化评测了。
? 其实线上和线下差距不大,因为OO的作业毕竟是个人项目,需要与别人交流的还是比较少。一些别的需要团队合作的课程,线上学习体验就真的很差了。
原文:https://www.cnblogs.com/maxu/p/13125052.html