OO第四单元总结

第四单元博客作业

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

第十三次作业

 

第一次UML作业的主要任务是实现一个UML类图解析器,可通过输入各种指令来进行类图有关信息的查询。在这次作业之前,我对UML类图中各种元素类型代表的含义以及不同类型之间的联系也不是很清楚,通过自己画图然后解析的方式加深理解之后,开始写代码。

首先对输入的元素信息进行分类保存。然后进行计算,遍历Class类型元素,通过元素与元素之间的联系,计算出所有class中需要输出的信息并进行保存。当输入命令时直接返回结果即可。在进行各种信息计算时,没有使用DFS之类的算法,计算是通过保存信息时建立的信息和信息之间的关系来进行计算的。

 

Bug情况

 

强测发现了一个bug,是由于两个同名但不同id的接口引起的,在之前的程序中,判断接口是否相同是通过名字判断的,修改为通过id判断即可。

 

第十四次作业

 

相较于第十三次作业增加了顺序图和状态图,以及一些检查循环继承,重复实现接口的检查。

这次根据检查的不同方向,分了4个类来进行分别处理。首先对输入的全部元素进行分流,分到类图部分、状态图部分、顺序图部分来进行分别处理。其中因为状态检查和类图部分共用很多信息,把它们合二为一进行处理。类图部分同上次没有区别,在类图基础上,加入了关于接口的递归来检查循环继承,在类图原本的输出类实现的全部接口部分,加入了重复实现接口的检查,以及类的循环继承。顺序图和状态图,保存好了各种元素信息之后,进行信息的处理来实现接口中的方法。本次作业关于顺序图和状态图的指令要求并不复杂,主要的就是信息统计工作,并注意细节问题即可。

 

本次作业需要保存的信息比较多,所以有好多类的属性。

Bug情况

 

强测发现了一个bug,由于直接复制了上次关于类图的处理,导致循环继承的时候递归爆栈了。修改判断条件即可。

 

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

第一单元:

在写第一单元第一次作业时,我还是一个小白,不怎么理解面向对象的思想和思维。经常是面向过程编程,闹出了不少笑话。随着三次作业的不断推进,我开始慢慢理解了面向对象,开始逐渐从面向过程转向面向对象。从现在看当时,还是依然存在许多问题,比如代码的冗余,封装性比较差,以及每次作业都没有为扩展留下空间,导致次次作业次次重构,花了很多时间。但是通过第一单元作业的联系,对正则表达式和OO都有了更好的理解。

 

第二单元:

第二单元是电梯调度相关作业。这一单元我学的并不好。在刚刚理解面向对象后,我迎来了线程作业,线程看起来又是这么的“玄学”,在对线程的调度上,我的理解还是不够深刻,或是产生死锁,或是没有准确调度,这都是我曾遇到的问题。由于对于线程的理解不够深入我甚至出现了一次作业三次重构的情况。但是经过了一个单元的学习和训练,还是有所进步的。

 

第三单元:

第三单元是JML规格相关作业。首先经过这一单元的学习,对jml规格从了解到学习实践,并在实践中加深了理解。前两次作业来说,难度上并不是特别高,除了正确性之外,需要考虑到时间问题,性能问题,这是我在前两次作业中遇到的问题。第三次作业,首先在架构上、算法上要进行优秀的设计和考虑,我觉得这次作业的难度在于“怎样做”,各位大佬在讨论区中给出了很多的做法启发,对我帮助很大,掌握了方法后,细致的编写代码,根据规格描述实现相应功能。

 

第四单元:

第四单元是UML相关作业。这单元对我最大的影响就是,对UML的理解从看图、画图、读图,进一步从构成元素、代码上来进行更深刻的理解。通过层层递进的UML作业,从类图到顺序图、状态图,使我对UML、对我以前的代码都有了更好的理解。

 

3.  总结自己在四个单元中测试理解与实践演进

从整个学期进行总结,强测翻车的主要原因都是代码某处笔误或者是细节处理产生了问题,但是这些问题实际上都是可以通过自测来测出并改过来的。这就说明了我对自己代码的测试还不够,所以写过代码之后应该进行很好的测试,来减少bug产生。

主要采用的测试方法是自己编写测试数据,但是由于数据构造常常局限不全面,所以很有可能不能测出问题,有时搭配静态代码检查,但是由于是我自己写的代码,所以也不太能看出错误。大佬们都是编写评测机来进行检查,由于我的水平有限,还不太会这种自动化测试方法,会继续学习的。

 

4.  总结自己的课程收获

OO课程已经结束,尽管在过程中我曾因为写代码、修bug而十分痛苦,但是OO在带给我痛苦的同时也带给我成长。回想这学期开始时,我还是一个刚开始学java的小白,但是现在已经有了基本的面向对象思维,并且能够编写几百行甚至上千行的代码来解决一些问题了,这就是我的成长。而且通过编写代码来解决一些问题(这些问题还有一定的实际性),带给我一定的自豪感。在OO课程中我学到的不仅仅是写代码的能力,还有测试能力,debug的能力,对别人代码进行测试和检查的能力。因为OO我这个学期过的很充实。

 

5.  立足于自己体会给课程提三个具体改进建议

(1)   关于理论课和实验课安排问题

作为一个小白,本学期经常是上午上理论课,下午马上就要上实验课进行应用。时间对我来说有点短,经常下午实验的时候很慌,很懵,要通过课上百度来进行学习。希望能给一些课下消化的时间。

(2)   关于指导书

主要是UML作业这两次作业的指导书,感觉对数据的限制、对指令到底干什么说的还不甚明确,经常给我一种疑惑感,“这个到底算不算”“这种情况如何进行如何判断”,这种疑问经常出现在我的脑海中,虽然最后大家不断在讨论区,水群中提问,老师和助教都进行了回答,但还是觉得如果能直接在指导书中体现更加直观明了。

(3)   关于理论课

首先我的身份是个小白,从小白的角度出发,希望理论课上老师讲的东西能够更基础一点。理论课老师讲的内容给我一种感受,我知道老师在将哪方面的知识,但感觉有一种“高高在上”的感觉,并且不能很直接的应用于作业中去,更像是我通过写作业有了对这方面知识有了一定的基础后,再来理解和学习的东西。

 

 

最后,感谢老师和助教一个学习的辛苦付出!我们写作业觉得辛苦,但是老师和助教们也是付出了很多的时间和精力,整个学期的OO课带给了我巨大的成长,谢谢老师和助教们!

posted @ 2019-06-23 11:59  bwt  阅读(161)  评论(0编辑  收藏  举报