oo第四单元总结

OO第四单元总结

本单元作业架构

作业一:

思路:本次作业的需求是解析UML类图,通过传入的一系列UmlElement,将类图的结构信息存储起来并可通过相关指令进行查询。显然本次作业的核心内容为数据结构的建立和指令功能的实现。我采用的的数据结构为若干个HashMap,其中Class和Interface分别用Id作为索引,其它元素用其父类作为索引,例如Class1的若干个operetion用一个Arraylist保存,并用Class1作为索引保存在HashMap中。指令查询时通过已有的数据结构进行简单的算法即可。

实现:具体实现时我分为3个类,即Main类,MyUmlInteraction类用于指令查询,Helper类用于建立数据结构。方法实现时主要困难为统计父类相关信息,我选择使用递归的方法实现。

作业二:

思路:本次作业的需求是在解析类图的基础上添加了解析状态图和时序图,我沿用上一次作业的架构和思路,类图的相关数据结构和代码直接复用,并参考其思路添加若干个数据结构即可,而且新添加的数据结构与之前的并不冲突,所以可在不同的类中保存,使结构更加清晰。新添加的6个查询功能并不复杂,建立数据结构后便十分容易实现。

实现:具体实现时我分为8个类,即Main类,四个功能类分别完成类图,时序图,状态图的解析和有效性检查,一个汇总类,以及两个用于建立数据结构的类。方法实现时遇到的困难主要是有效性检查,我也是选择采用递归的方法进行检查。

架构设计及OO方法理解的演进

第一单元:第一单元时我尽量摆脱面向过程的编程思路,将不同的功能以oo的思路进行架构,并力图增加可扩展性,但是结果不尽人意,最终没能避免单个类实现过多功能,而且三次作业中只有少量代码实现了复用。

第二单元:本次作业引入了多线程概念,更考验我的架构设计。通过第一单元的训练,我的架构已经可以达到较为清晰的水平,同时也在各次作业中实现了代码复用,属于进步。但遗憾的是我对多线程的理解并不深入,没能很好的利用锁机制控制cpu时间,而是采用了延迟轮询的方式进行控制。

第三单元:本次作业为通过jml语言实现功能,通过两个单元的训练和jml的规范化要求,本次代码在架构时充分避免了冗余代码和混乱设计。本单元的难点在于组织有效的数据结构,并通过一些算法进行优化,通过学习后基本完成任务。

第四单元:第四单元的设计更为自由,也是将一学期的成果最终展示的机会。本次作业中我采用的架构较为成功,数据结构建立后实现方法时很流畅自然,而且添加功能后仍可复用之前的代码并采用相同思路扩展,代码量较多时可直接分类。

测试理解与实践的演进

在第一单元中,我的测试思路为直接看代码,理解思路后试图寻找漏洞,确实也起到了效果,也帮助我加深了理解,但效率低下。第二单元中因为多线程的引入出现了测试结果不可复现的问题,就更考验调试时的分析能力。第三单元的核心转为算法优化角度,测试时的思路便转为生成更复杂的的边界数据,在本单元中我也学习了自动化测试的实现。第四单元测试时在我的设计中重心在空指针的检测与避免。

课程收获

经历一个学期的oo学习,虽然有十几个周末都奋战在代码的编写中,也经历过n个与bug相伴的不眠夜,但最终的收获是十分明显的,复出是十分钟值得的。最大的收获便是面向对象编程能力的提升,对比第一单元时费尽心思想进行拆分,结构却还是混乱且不合理,第四单元的架构可以帮助我十分轻松流畅的实现功能代码,回顾结构时也更加满意。此外,本学期的oo课程引入了代码风格的规范要求,帮助我们养成良好的编码习惯,在以后参加大型工程编码时是极为重要的。最后,通过本课程的学习,我对java语言产生了很大的兴趣,在课程结束后我计划更深入的了解学习java语言。

课程建议

个人认为oo课程的设计的用户体验已经十分出色,但本着百尺竿头更进一步的思想,还是有一些可以更完善的地方。个人认为测试能力与编码能力同样重要,所以可以在每单元中引入硬性的测试能力要求,例如在每次作业中发布一份“问题代码”,让同学们提交测试报告和用例信息,更好的锻炼测试能力。

posted @ 2019-06-24 11:14  薛靖宣  阅读(147)  评论(0编辑  收藏  举报