第四单元架构设计总结
第四单元整体的设计思路就是尽可能接近 UML 本身的架构。在 UML 中包含特定属性的类型就用自定义类的方式实现,如包含 UmlParameter
的 UmlOperation
,包含 UmlOperation
的 UmlClass
等,都分别自定义了 MyUmlOperation
和 MyUmlClass
类。
整体的思路是在 UmlGeneralInteraction
构造器中实现对所有非查询输入的解析,将完整的 UML 结构用很多 HashMap
保存在 UmlGeneralInteraction
中,并在查询时通过名字查询到相应 HashMap
中的 value
,再深入到具体的类 / 接口等中完成查询任务。
由于最后一次作业需要实现大量的查询指令,因此存在 UmlGeneralInteraction
超出行数限制的情况,将其功能拆分出四个子类,MyUmlStandardPreCheck
, MyUmlClassModelInteraction
, MyUmlCollaborationInteraction
, MyUmlStateChartInteraction
分别实现有效性检查、类图查询、时序图查询和状态图查询等工作。
由于在三次作业中都采用迭代开发,因此只展现最后一次作业的 UML
图,如下:
主要类的关系如下:
四个单元中架构设计及 OO 方法理解的演进
四个单元中我尽量做到实现面向对象思想,并且尽量让代码更好的实现迭代,减少重构的次数。从结果上看, 我在最后两次作业中都没有进行重构,这一方面可能是因为面向对象的思维加强了,另一方面也可能是因为后两次作业题目的梯度相对前两次有所减少,整体需求改变不大,更易于在原本的代码上进行改进。
总的来说,通过一学期的 OO 课程,我对于面向对象的思维有了更深的理解,也认识到一个好的架构对于代码的重要作用。从开始拿到需求就开始写代码,到先构思好架构,写好框架再丰富细节,我思考问题也变得更有条理和层次性了。
四个单元中测试理解与实践演进
- 第一单元中我采用了结合 python 和 jar 包搭建评测机的测试方案。这种评测方案相对不太需要思考,只需要海量的评测数据做到尽可能全面的覆盖所有情况。这一单元中讨论区的评测机搭建帖子对我帮助很大,让我了解到评测机数据构造和结果检验的基本方法,并最终得以实现。
- 第二单元主要采用手动构造特殊样例的方式进行评测,主要针对 CTLE 和 RTLE 的情况
- 第三单元我接触到了单元测试,因此开始基于 JUnit 进行评测,这种评测方式的好处是对于每一个单元的覆盖性较强,但对于单元之间的衔接部分难以有效的检验,除此之外,编写 JUnit 测试代码的时间也很长,因此只是针对部分方法构造了单元测试
- 第四单元我采用了阅读代码和构造特殊样例的方法进行测试。我发现通读代码,并和指导书中的要求一一比对也不失为一种有效的检验方法,当然这种方法可能缺乏一些客观性,因此还需要结合边缘样例共同使用。
总的来说,OO 课程的学习使我了解到了不少有效的测试方法,并且针对一些方法也付诸了实践。但不足之处在于,相比测试我自己的代码,似乎互测环节更能调动我测试的积极性,因此很多测试的构造都是从互测环节开始的,这也导致了强测中的一些问题,希望以后要认真对待自己的代码。
课程收获
一学期的 OO 课不知不觉走到了尾声,我除了对于 java 语言本身有了更深入的了解,对面向对象思想也有了更多的认识。
通过一学期的学习,我了解到了:
- 设计模式
- 单元测试
- 代码风格
- 规范 (JML, UML, Javadoc 等)
- ……
在一次次写码过程中,我认识到一个好架构的重要性,在写具体代码之前,先写好架构,再将具体功能填入其中往往会事半功倍,同时,一个优秀的架构也能避免重构。
除此之外,OO 课程也锻炼了我的阅读能力,正确理解指导书中的意思,不错看,不漏看的能力对于以后阅读需求文档也一定会有很大帮助。
改进建议
- 建议给出实验课成绩或参考解答,便于学习
- 希望增加讨论区回帖功能,便于将问题和解答对应起来
- 第四单元的指导书希望能更全面,更严谨,其部分语言表达还存在不清晰的问题,这点从讨论区的问题数量也可以看出。