oo课程总结

架构设计

本单元三次作业提供的UmlElement大多是自下而上的节点,我的架构是根据传入的元素建立自上而下的树形结构,并保存根节点,以便于查询。如第一次作业保存所有的类和接口节点,并将类和接口节点连接到属性/方法等。第二次作业在general类中增加三个内部属性,分别解析类图、顺序图和状态转移图,分别建立树形结构,并进行查询。最后一次作业将规则检查分配到不同的图中。

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

在第一单元的设计中我可以划分出不同的类,将功能进行分割和封装,但出现了一些过于复杂的方法,行数超过60,且功能可以细分,造成逻辑复杂,容易出错的结果。第二单元的代码主要着力于避免并发错误,采用了生产者消费者的设计模式,整体架构比较清晰,一些细节的把握还是比较吃力。第三单元用JML对数据类型和方法规格都进行了一定的约束,架构没有太大的问题,主要着力于如何降低时间复杂度、复杂逻辑的算法设计等。第四单元与第三单元类似,都是指令查询模式,因此架构设计的难度也较小,使用3个内部类来使general类具有类似多继承的功能,将方法逐层封装。

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

第一单元主要采用手动构造测试样例的方法,针对输入规则,构造特定的输入样例,进行黑盒测试。第二单元开始编写自动测试脚本,以适应输入输出数据量大,难以判别的情况。第三单元引入了单元测试,使得测试聚焦于更小的颗粒度,对此进行了尝试,基本可以替代之前的手动黑盒测试,但由于每一个查询都基本对应一个方法,而且设置上下文较为繁琐,其优势没有完全显示出来。第四单元以测试脚本对拍为主,单元测试过于繁琐因而放弃使用。

我对测试的理解是主要在覆盖性上下功夫。单元测试可以解决一个特定模块的功能是否能正常完成,比较适合对复杂逻辑的方法进行测试。测试脚本可以进行大量测试,但对于输入的设计和检查的规则的确定仍需要根据经验和对题目的理解,对于边界情况可能测试不到。

 

课程收获

  • 彻底提升了我编写程序的习惯、技巧、代码规模、架构等。之前的课程或聚焦于语言,或聚焦于算法,直至本课程学习到了程序设计的知识,积累了宝贵经验,才真的觉得自己学会了程序设计。

  • 深刻理解了面向对象的优点,比较熟练的掌握了很多面向对象的方法与设计模式。

  • 从UML的视角锻炼了架构设计分析的能力,锻炼了顶层设计的思维。

  • 对JML的作用和编写有了一定的认识,能够给出JML或根据JML编写代码。

  • 提升了理解需求的能力,阅读代码的能力和测试的能力。

改进建议

  • 建议课程不要拖到考期,高工的期末考试真的很多,建议尽量避免最后一周还要肝oo作业,考期还要写oo总结的情况。

  • 理论课教学内容太过“理论”。特别是本学期的录播课程,给我一种很强的读稿的感觉,有点抓不住重点。作业和课程内容有时候也比较脱节,造成上课听不懂,写作业又感觉与理论课无关,需要查询大量资料的情况。建议在理论课中加入一些对作业的指导。如第二单元似乎没有讲到线程的退出问题,第四单元没有具体介绍顺序图、状态图的Element。这些内容与作业关联性很强,建议做一些介绍。

  • 第四单元解析Uml的作业感觉更多聚焦在java而不是Uml,虽然作业能加深对Uml的内部结构的理解,但大部分时间都花在了理解代码,架构设计上,除了没有JML,干的事情有点类似第三单元。其实从导出输入数据的那一刻起,干的事情就与UML无关了。建议将第四单元作业改为用java通过一系列指令构造出UML图,或者改为实现一个满足复杂UML的java程序,我觉得更能接受一些。

  • 互测是本课程一个很好的设计,但实际操作的工作量很大,且局限在一两天的时间里,占用一些周末的时间。建议减少互测的次数,比如一个单元互测一次。

体会

一个学期的学习可以感受到课程的老师、助教真的很用心。感谢助教和老师们一个学期的付出和一些热心同学们的帮助!线上感觉比较容易摸鱼,觉得老师似乎有逐字稿,读起来很6听起来有点累,与同学交流想法也有一定程度的受限。但总体来讲我觉得对教学质量的影响不大,毕竟作业和实验还是实打实的完成了。本课程的收获真的很大,虽然很累但也值得。希望本课程越来越好。

posted @ 2020-06-14 19:36  言-午  阅读(145)  评论(1)    收藏  举报