OO第四单元单元总结

1.本单元两次作业的架构设计

第四单元的两次作业,我的表现都不是很好,在强测中发现了许多BUG,一方面我认为是由于自己对于UML的相关概念掌握的还不是很到位,另一方面,我觉得这一单元的指导书许多地方感觉没有考虑很完备,以致于在反复修改中,把自己搞糊涂了。下面具体讲一下我的相关架构设计思路。

1.1第一次作业

第一次作业我采用的设计是,将UMLElement下的各个子类分别用一个arraylist来存储,以便查询。同时,我把类视作一个容器,设置了一个MyClass类,把与该类相关的属性和方法全都封装在里面,这样查询的时候就只需要查询MyClass类的对象就行了。

然后对于各个方法的具体实现,在这里就不加以赘述了,因为这次作业其实质是考察对于类图的熟悉程度,在搞懂了相关概念的基础上,实现具体的查询操作其实可以很无脑的(由于时间很充分,所以大多数查询可以采用暴力,而且不需要进行缓存,以保证正确性)

1.2第二次作业

第二次作业我采用的设计是,关于类图部分延用第一次的设计,关于状态图和顺序图的部分,则是直接在MyUmlGeneralInteraction里面实现

同样类似的在MyUmlGeneralInteraction里通过ArrayList来存储有关顺序图和状态图的各个组成元素,并在构造方法中完成初始化。

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

第一单元——多项式求导

第一单元是初识面向对象,对于Java语言也不是很熟悉。记得对于多项式求导思考问题的时候还是特别偏向函数式和过程式,并没有明确的对象观念,也没有对类有一个明确的认识,所以代码显得很长,层次性很差,现在看起来感到又奇怪又难受。

第二单元——多线程电梯

第二单元接触了多线程的设计,也算是一次挑战,对于多线程,我以前没有接触过,刚开始接受起来还觉得有点困难,但是在把多线程大概搞得有点明白的时候,就感受到多并发编程的乐趣, 然后把电梯问题分成电梯、人、调度器,用分层的思想来解决问题,也算是勉强把这单元的任务给完成了,虽然在实现的过程中还是遇到了许多的困难,也在强测中发现了一些bug,但是那些属于细节问题,又得另说吧。

第三单元——JML与地铁线路图

第三个单元主要考察的是性能,许多人戏称是数据结构单元,因为这个单元涉及到许多图论算法,一不小心就容易tle,所以重点考察的是算法,弱架构。但是实际上架构也是需要思考的,重点的部分是,如何去存储图和每次查询的缓冲数据,并且保持一定的封装性。但其实这个问题,官方已经给出了比较优秀的解题思路,那就是Path->Graph->RailwaySystem,三次作业本身的层层递进其实就解决了架构设计的相关问题。

第四单元——UML的解析

第四单元是实现UML解析器,包括类图、状态图、和顺序图。所以相关的架构设计也主要是围绕构建三种图和相关的子元素。所以架构的核心是搞懂三种图中,元素间的组成关系,以及与之对应的继承、关联、实现等相关关系。到了第四单元,程序整体的架构已经十分完善了,回想起来,这或许就是OO带来的变化吧。

3.测试理解与实践的演进

​ 第一单元是使用了JAVA库来通过正则表达式生成数据,并通过sympy库得到正确答案,然后随机暴力测试。

​ 第二单元由于是多线程任务,个人觉得不是很好测试,于是乎并没有进行相关的测试。

​ 第三单元通过Junit进行精确位置的测试。

​ 第四单元通过画图构造样例来测试。

​ 四个单元下来,感觉测试这个没有固定的思路,只能说根据不同的任务有着不同的测试重心和策略。

4.课程收获

​ 课程最大的收获就是对Java语言的认识,以及对OO的设计思想有了一定的了解,并且有了一定的实战基础。虽然OO的路还很长,很多东西都还不会,但是上完这门课之后,我觉得基础是够了,一个用来自学的基础是已经有了。此外在这门课上还遇到了许多热心的同学,和厉害的大佬,也算是一段有趣的经历吧。

5.给课程的改进建议

1.希望合理分配理论课和实验课之间的内容设置。

2.关于UML、JML希望有更详细的讲解。

3.希望指导书的说明能够再准确一些。

原文地址:https://www.cnblogs.com/backkom-buaa/p/11079262.html