BUAAOO Unit4博客作业
BUAAOO Unit4单元总结
- 总结本单元作业的架构设计
- 总结自己在四个单元中架构设计及OO方法理解的演进
- 总结自己在四个单元中测试理解与实践的演进
- 总结自己的课程收获
- 立足于自己的体会给课程提三个具体改进建议
本单元架构设计
Unit4围绕UML进行,重点在于对UML的理解,分别从元素的角度和整体结构的角度认识UML模型,了解其含义与关系。三次作业都是对mdj文件的操作,第一次作业是对类图模型的解析和查询,第二次是对类图、顺序图、状态图的解析和查询,第三次是对三种模型有效性的检查。
第一次作业架构
第一次作业为类图解析,我建立了MyInterface、 MyClass 、MyOperation 这三个类来管理接口的继承关系等、类内属性、操作、继承关系、实现接口、关联的类等以及操作的参数(还建立了ParameterType类来记录一个操作的所有参数),并实现相应的查询功能。
类图如下:
在解析时对于class和interface元素直接解析,其他元素分别保存到对应的列表中,在遍历过所有元素后再次逐个遍历来解析其他元素,避免可能有的元素在其从属元素之前出现导致没有记录到。
作业中采用最多的数据结构就是HasMap,便于根据id或者name查找相应的元素。如MyUmlInteraction中有classes: HashMap<String, MyClass>,来根据id查找类,mapClass: HashMap<String, ArrayList<String>>,来根据name查找对应的idList。
对于要考虑继承问题的指令,我的解决方案是直接深度优先遍历,并且在查找继承链的时候,直接存下所有需要考虑的父类的属性、接口、关系和顶级父类,在遍历过一根继承链的时候对继承链中的每一个遍历到的元素做isVisited标记。这样做的原因是前两次作业都是对有效模型的查询,所以不会存在继承环,可以放心地递归遍历然后记录父类信息。否则若想能够完整地记录父类信息,一次简单遍历无法达成要求。
第二次作业架构
第二次作业在第一次作业地基础上扩展类图解析器,使之能够解析顺序图和状态图。也就是增加对顺序图和状态图地解析查询功能。我的做法是完全保留上次的类,将其作为提供相应的接口的一个管理类,在解析文件的时候将类图相关的所有元素保留在一个List中,并传给 MyUmlClassModelInteraction 即第一次作业中的MyUmlInteraction类解析类图。而顺序图和状态图的解析直接在MyUmlGeneralInteraction类中进行。
类图如下:
实现较为简单,在MyState中存放后继状态和相应的Trigger,在查询所有后继状态时采用直接遍历的方式,每次查询都进行一次从头开始的深度遍历查询。
第三次作业架构
第三次作业主要是UML模型有效性检查。这一单元对UML规则的理解是最细致的,很容易出错。在这次作业中建立了一个Checker类来进行类图部分的检查,否则会使 MyUmlClassModelInteraction类超过500行不满足CheckStyle的要求。其中R002采用了dfs。
类图如下:
四个单元中架构设计及OO方法理解的演进
第一单元,初次独立实现一个完整的面向对象的程序,着实费了不少劲儿,三次作业两次重构,现在想想都给俺整笑了😆。第一单元初步理解了面向对象的形式,知道了什么样子是面向对象,简单的面向对象程序的写法,从递归下降的方法也理解了面向对象是不局限于具体形式的,而是一种程序结构设计的思想。
第二单元程序电梯设计主要是多线程,在面向对象的基础上实现进程同步互斥,这一单元注重对OO的几个程序设计模式的应用。但是我对于这个单元的面向对象方面的实现还有遗憾,没有使用老师说的那种一个电梯一个调度队列的管理方法,而是使用了电梯自由竞争,过两天自己再试一下~
第三单元只是按部就班进行程序设计,架构方面没有太大设计性,重在对JML规格的理解和实现。这一单元主要是对OO思想的一种程序的实现。
第四单元UML模型是对OO的一个更高层次的审视,通过阅读和绘制UML模型,对类间关系,类与接口等等的一系列元素间的关系有清晰得认识,对OO的思想也有了更加清晰的理解。这一单元的架构设计有一定空间,建立了相应的类管理其自身数据,构建了较为合理的类间关系。
四个单元中测试理解与实践的演进
第一二单元主要靠黑盒测试,以评测机自动生成随机样例为主,辅以手动构造数据,效果尚可,同时使用python搭建评测机,实现(半)自动化的测试,并开始了解并使用回归测试以避免迭代过程中误伤之前的功能。
第三四单元开始接触单元测试,练习使用junit来进行针对每个类的独立测试,然后再进行黑盒测试(和同学对拍),后两单元基本靠手动构造数据和同学对拍进行测试,针对方法进行数据的“覆盖性”测试(显然覆盖得也不太好)。
课程收获
这个课程不得不说真的值,不仅学会了一门编程语言,还学了一门编程思想,还学了规格语言和UML建模,一举四得,nice!(但是真的挺痛苦的)
从假期开始没接触过OO不会Java,到现在能够比较熟练使用Java,利用面向对象思想设计架构编程,真的感觉到自己在进步。还有代码风格上也逐渐正规了起来,终于不再满篇拼音和abcd了,词汇水平up up~ 测试上收获也很多,以前只是依赖黑盒测试,现在也逐渐开始学会单元测试了。再有就是评测机上,这方面我的感觉仍不是很擅长,只会一些简单的对拍和生成数据,遇到复杂的问题就束手无策不敢下手了,还需要继续加强练习。
课程建议
- 第四单元指导书理解起来真的并不容易,题目描述真的不是很清楚,建议做些修改,明确阐释每个规则,或者提供额外指导书分析UML的那些规则。
- 我认为在评测机方面可以多一点实践上的教学或者练习,我的个人感觉是大佬研讨课上分享的都很好,老师课上讲的也很清楚,但是上手却不知道从哪里上,具体怎么做也不是很清楚,所以一直畏畏缩缩不愿意做,如果课程组能够提供一些搭评测机方面的教学就好了,不必占用课堂或者实验,只需要给一些评测机的代码让大家学习就好了。
- 实验课希望有答案公布和分数公布,做完没有结果的事情做起来就很没有动力,最后大家的态度好像都不算太认真了。

浙公网安备 33010602011771号