OO第四单元总结博客

本单元作业实现了一个 UML 解析器,使其支持对 UML 类图的分析,可以通过输入相应的指令来进行相关查询,并具有对规则检查的功能。

1 本单元架构设计

1.1第一次作业架构

本次作业的目的为实现对类图相关指令的查询,需要理解类图中各个元素之间的关系,包括UMLClass,UMLOperation,UMLAttribute,UMLInterface等,采用层次化结构储存各个UML元素以方便实现指令的查询,第一层级为Myclass,将对应的类的方法,实现的接口,以及关联关系存储其中,第二层级中,MyOperation存储UmlParameter,MyAssociation存储UmlAssociationEnd,同时,在MyClass和MyInterface中存储所继承的父类,方便查询与继承相关的指令,各条指令都采用名字进行查询,在存储时用HashMap建立名字与对象之间的映射。

1.2第二次作业架构

本次作业相较于上一次增加了对顺序图的状态图的查询,新增了UMLState,UMLMessage,UMLRegion等元素,同样对顺序图和状态图及相关元素分别建立层次化结构,对顺序图,第一层级为MyCollaboration,其中存储MyInteraction和UmlAttribute,MyInteraction存储MyLifeLine,MyLifeLine中存储UmlMessage。对于状态图,第一层级为MyStateMachine,其中存储MyRegion,MyRegion中存储MyState,MyState中存储UMLTrainsition和对应的后继状态。

1.3第三次作业架构

本次作业是对于类图,顺序图和状态图的正确性检查,在对前两次作业的架构进行略微的修改便可很轻松的实现各项检查,在CheckTool中实现各项检查的功能。

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

2.1第一单元

本单元的目标是实现对多项式的化简,对于第一次的作业,刚开始感到无从下手,在训练中学习了梯度下降后才有了眉目。在本单元中,一是对面向对象的思想,JAVA语言的初次接触与理解运用,二是学习了层次化结构,在梯度下降法层次化的拆解出各个元素,表达式,项,因子。通过第一单元的学习,让我初步形成了面向对象思想,真正写出了一个有着清晰架构,有着完善的思路,且有利于迭代开发的代码之后,我体会到了面向对象编程的好处,在之后几个单元中,也都做到了先设计架构,再动手编程。

2.2第二单元

本单元是多线程电梯,类似于生产者消费者模式,生产者是需求产生类,消费者是电梯,需要一个调度器类在中间充当托盘的作用。在三次作业中都是一个生产者和多个消费者,要实现电梯的动态增加,电梯到达楼层的限制以及电梯的调度。在本单元中学习到了多线程的使用,线程之间的切换的保证,锁的使用,保证线程安全,实现并发。

2.3第三单元

本单元是根据JML规格完成相应的代码,在作业中实现了一个社交网络的模型,本单元的架构已经建好,虽然省却了架构的难题,但是,通过阅读已经有的代码,我学到了一个优秀的架构应该如何设计,这一单元是我学OO架构的一个极好的例子。阅读JML规格后也要根据情况完成自己的实现方法,作业中涉及到一些图论的算法,若是实现方式不好很容易导致超时。对于同样的代码规格,有非常多的实现方式,这些实现方式性能上有极大的差异。就以并查集为例,可以说并查集是一种非常优美的数据结构,不但降低了复杂度,而且十分直观,代码量也不多。在本单元中学习到了对JML规格的读写以及规格化的设计与实现。

2.4第四单元

本单元是解析UML图并进行查询,主要是需要自己构建类进行UML图的存储,主要分成类图类、顺序图类及状态图类,对不同的图中的元素分别进行解析处理。在本次作业中学习了UML类图,顺序图,状态图的规范。

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

3.1第一单元

在本单元中测试主要采取对特殊数据的构造以及随机数据生成的方法进行测试。

3.2第二单元

在本单元中测试主要采取随机数据生成的方式进行测试,同时在数据生成时附加一些条件,比如添加的乘客都在同一栋楼之类的约束。本单元中尽管找到bug也难以定位bug的原因,采用在各个可能的位置添加打印输出来定位bug的位置。

3.3第三单元

在本单元中测试采用junit进行测试,在本单元中主要的测试与bug便是出现在相关图论算法的超时问题上,对相关图论算法指令的实现采取单元测试,并随机生成大量数据观察是否超时来改进算法。

3.4第四单元

在本单元中主要采取特殊数据的构造,在本单元中,随机数据的生成较难以实现,我采用构造特殊数据对每个指令的每个分支进行测试,观察功能是否正确。

4 课程收获

这一学期的oo课程使我收获颇丰的,oo是一门学以致用的课程,与其它理论性较强的课不同,OO能给我带来切实的成就感,以及对于以后的工作也打下了坚实的基础。通过OO,我也切实提高了自己的的debug能力。回想起debug场景,经历了痛苦,得到一份较为满意的代码,这种感受是别的课程带不来的。从面向对象设计→多线程→规格化设计→UML理解,我的能力有了很大提升,周周的中测+强测+互测+bug修复,确实展现了它身为核心专业课的地位,但觉得互测环节没能做到很好,经常由于时间不够而未能对其他同学的代码进行深入分析,这一点可能还是我自身的问题,难以面面俱到。本学期课程已然结束,很开心这一学期的学习,满满的收获,我也终于跨过了OO这一座大山。

5 改进建议

1.希望能多增加一些弱测和中测的点,有时即使过了中测到了强侧也可能几乎没有对的点。
2.希望能在每次实验课后公布正确的答案,实验课的代码与作业息息相关,而无法知道自己的填写与对代码中模式,架构的理解是否正确,而不能很好的运用到作业上
3.希望能减少一些提交代码的冷却时间,在有提交限制的情况下,大家也都不会胡乱提交,有时提交后错误便能很快发现自己的错误所在并思考清楚进行改正。

posted @ 2022-06-28 10:14  YanG2k17  阅读(26)  评论(0编辑  收藏  举报