OO第四单元作业总结
一、本单元作业的架构设计
1.第一次作业
第一次作业我选择将输入的类图模型分给Class、Interface这两个基本模型存储,同时也将Operation分出来存储,这样的优势就是结构比较清晰,查找时可以到相应的类中查找。本次作业类图如下所示:

由于深度优先遍历的时候没有剪枝,导致我在强测试T了一个点,比较可惜。这也警示我需要在后两次作业中注意TLE的问题。
2.第二次作业
第二次作业在第一次作业的基础上增加了顺序图和状态图,所以我将整体模型拆为了类图、顺序图和状态图分别处理。本次作业类图如下:

3.第三次作业
第三次作业加入了模型的检查功能,所以我增加了一个类专门进行检查任务。类图如下所示:

二、在四个单元中架构设计及OO方法理解的演进
随着OO课的进行,我对编写程序的思想逐渐由面相过程变为了面向对象;从最开始一main到底,到现在会使用多个不同的类和方法,实现一些功能。
第一单元时,我对面相对象毫无头绪,不知道何为面向对象,也不知道自己的代码其实是面向过程的。但是随着任务的进行,我发现我的代码难以实验需要的功能——面向过程不能完成作业——我才认识到什么是面向对象,为什么需要面向对象。
在之后的作业时,我的思考方式由“怎么顺序完成一个任务”,转变为“完成这个任务需要哪些对象”。比如完成第二单元的电梯,我会想到这次作业所需的对象,即“电梯”、“调度器”和“输入程序”,然后通过分别实现各个对象的功能完成作业。在第三次与第四次作业中,我也是这样思考的。
于是,我的架构不再是通过一个个函数拼接完成代码,而是使用各种类的方法完成代码。面向过程的目标是找到“完成所需的过程”,而面相对象的目标是找到“完成所需的对象”,这就是我对OO的理解。
三、在四个单元中测试理解与实践的演进
在第一单元中,我了解到了“评测机”的原理和实现方法,让我迈进了自动化战争的队伍。
起初,由于我刚接触评测机,不清楚怎样完成代码,所以我的评测机代码中也经常有BUG,还存在测试不全面、强度不高等问题,这也导致了我挂掉了很多强测点,还有大部分是由于TLE的原因(这也说明我的数据强度不够等问题)。
随着第一单元结束,虽然结果不尽如意,但是我也逐渐熟悉了书写评测机的方法。于是,在第二、三单元中,我通过使用评测机测试的方法,最终没有挂掉一个强测点。
由于进入烤漆,写评测机的时间少之又少,所以第四单元我选择了手动构造样例的方法完成测试。手动构造样例需要强大的想象能力,否则很难做到全面测试,这也是手动构造相对自动测试的弊端所在。
四、课程收获
我认为我在OO这门课中收获还是很大的。
在开学前,我几乎没有接触过java、python,但在学期结束后,我最终掌握了这两门语言,并可以使用他们实现很多任务。同时,我对面向对象也有了更深的理解,认识了多线程、JML、UML等等内容。我认为这些收获可以在未来对我起到巨大帮助。
五、对课程的改进建议
希望第四单元作业第一次作业工程量可以减少一些,或者和第二次作业交换下顺序,感觉第一次作业消耗时间太长了。
希望实验课结束后可以进行讲解,因为有些实验题确实不知道从何入手。
希望第一单元作业老师和助教可以给予更多的辅导和帮助,比如在预习作业时设置一个简单版的求导,或者表达式处理,让我们可以更快的产生面向对象的感觉,不至于在第一单元时就放弃了整门课程。因为我周围有的同学在第一单元结束时,就已经放弃了OO,所以后面单元的作业都没有完成,原因就是第一单元过难,让他丧失了信心,但实际上后面几个单元都没有第一单元困难,也能学到更多内容,所以我认为这对他来说十分可惜。

浙公网安备 33010602011771号