BUAA OO Unit 4

第四单元架构设计总结

第四单元整体的设计思路就是尽可能接近 UML 本身的架构。在 UML 中包含特定属性的类型就用自定义类的方式实现,如包含 UmlParameterUmlOperation,包含 UmlOperationUmlClass 等,都分别自定义了 MyUmlOperationMyUmlClass 类。

整体的思路是在 UmlGeneralInteraction 构造器中实现对所有非查询输入的解析,将完整的 UML 结构用很多 HashMap 保存在 UmlGeneralInteraction 中,并在查询时通过名字查询到相应 HashMap 中的 value,再深入到具体的类 / 接口等中完成查询任务。

由于最后一次作业需要实现大量的查询指令,因此存在 UmlGeneralInteraction 超出行数限制的情况,将其功能拆分出四个子类,MyUmlStandardPreCheck, MyUmlClassModelInteraction, MyUmlCollaborationInteraction, MyUmlStateChartInteraction 分别实现有效性检查、类图查询、时序图查询和状态图查询等工作。

由于在三次作业中都采用迭代开发,因此只展现最后一次作业的 UML 图,如下:

BUAA OO Unit 4

主要类的关系如下:

BUAA OO Unit 4

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

四个单元中我尽量做到实现面向对象思想,并且尽量让代码更好的实现迭代,减少重构的次数。从结果上看, 我在最后两次作业中都没有进行重构,这一方面可能是因为面向对象的思维加强了,另一方面也可能是因为后两次作业题目的梯度相对前两次有所减少,整体需求改变不大,更易于在原本的代码上进行改进。

总的来说,通过一学期的 OO 课程,我对于面向对象的思维有了更深的理解,也认识到一个好的架构对于代码的重要作用。从开始拿到需求就开始写代码,到先构思好架构,写好框架再丰富细节,我思考问题也变得更有条理和层次性了。

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

  • 第一单元中我采用了结合 python 和 jar 包搭建评测机的测试方案。这种评测方案相对不太需要思考,只需要海量的评测数据做到尽可能全面的覆盖所有情况。这一单元中讨论区的评测机搭建帖子对我帮助很大,让我了解到评测机数据构造和结果检验的基本方法,并最终得以实现。
  • 第二单元主要采用手动构造特殊样例的方式进行评测,主要针对 CTLE 和 RTLE 的情况
  • 第三单元我接触到了单元测试,因此开始基于 JUnit 进行评测,这种评测方式的好处是对于每一个单元的覆盖性较强,但对于单元之间的衔接部分难以有效的检验,除此之外,编写 JUnit 测试代码的时间也很长,因此只是针对部分方法构造了单元测试
  • 第四单元我采用了阅读代码和构造特殊样例的方法进行测试。我发现通读代码,并和指导书中的要求一一比对也不失为一种有效的检验方法,当然这种方法可能缺乏一些客观性,因此还需要结合边缘样例共同使用。

总的来说,OO 课程的学习使我了解到了不少有效的测试方法,并且针对一些方法也付诸了实践。但不足之处在于,相比测试我自己的代码,似乎互测环节更能调动我测试的积极性,因此很多测试的构造都是从互测环节开始的,这也导致了强测中的一些问题,希望以后要认真对待自己的代码。

课程收获

一学期的 OO 课不知不觉走到了尾声,我除了对于 java 语言本身有了更深入的了解,对面向对象思想也有了更多的认识。

通过一学期的学习,我了解到了:

  • 设计模式
  • 单元测试
  • 代码风格
  • 规范 (JML, UML, Javadoc 等)
  • ……

在一次次写码过程中,我认识到一个好架构的重要性,在写具体代码之前,先写好架构,再将具体功能填入其中往往会事半功倍,同时,一个优秀的架构也能避免重构。

除此之外,OO 课程也锻炼了我的阅读能力,正确理解指导书中的意思,不错看,不漏看的能力对于以后阅读需求文档也一定会有很大帮助。

改进建议

  1. 建议给出实验课成绩或参考解答,便于学习
  2. 希望增加讨论区回帖功能,便于将问题和解答对应起来
  3. 第四单元的指导书希望能更全面,更严谨,其部分语言表达还存在不清晰的问题,这点从讨论区的问题数量也可以看出。
上一篇:SpringBoot:SpringBoot项目的配置文件放在Jar包外加载


下一篇:【SpringBoot WEB系列】WebFlux静态资源配置与访问