oo作业第四单元总结暨结课总结

目录

  • 一、第四单元作业架构设计
    • 1.第一次UML作业架构设计
    • 2.第二次UML作业架构设计
  • 二、架构设计和OO方法理解演进
  • 三、测试理解与实践的演进
  • 四、课程收获总结
  • 五、三个具体改进建议

一、第四单元作业架构设计

1.第一次UML作业架构设计

1.1

总的来说,第一次作业还是比较简单的,在类的设计上,个人为了方便管理数据,新开了MyOperation、MyClass、MyInterface三个类,每一个类中都利用self变量来存储对应的UMLElement,并根据情况选择Hashmap或Arraylist来进行批量管理,这样加上Main类和最终完成功能的MyUmlInteraction类,一共是五个类。

针对数据输入不一定按照特定逻辑顺序这一特点,我选择先将所有的输入元素初步划分到各自的集合中(部分存在重名问题的元素我采用了双map分别以ID和name作为key进行存储)。然后再通过一系列mix函数对需要建立联系的元素集合进行遍历。例如我需要找到一个类所有自己定义的属性,我就遍历UMLAttribute集合,对于每一个UMLAttribute都通过其parentid找到对应的类并加入其中。

而由于某些查询指令还涉及到类的父类,因此在所有直接联系(继承、属性、操作等等)建立完毕之后,我通过updateclass函数对所有的class进行遍历,进而通过class.uodate()函数,以递归的形式,将其父类的一些属性纳入自身管理系统。

这样进行完毕之后,所有的查询指令便可以直接读取数据。

2.第二次UML作业架构设计

2.1

第二次作业在广度和深度上相比第一次作业都有了不小的加强,一方面,出现了许多新的UMLElement需要我们进行管理考虑,另一方面,几条特殊的检查规则也需要我们进行仔细的思考与设计。

首先要解决的是功能拆分的问题,如果继续将新增的功能加到原来的MyUmlInteraction类中,得到的会是一个冗长混乱的代码,不仅会导致checkstyle扣分,还会导致难以维护,所以我选择令新的MyUmlGeneralInteraction类继承之前的MyUmlInteraction类,将新增的功能、数据写到MyUmlGeneralInteraction类中,而将原来的功能和数据(甚至还有三个检查,因为这三个检查基本不涉及新增的数据)继续保持在MyUmlInteraction类中,这样两个类各司其责,显得十分明了。

新增的一些查询功能并没有很大的难度,基本可以照着第一次作业的模式去写,三个检查在设计上有一定难度,我采用的是深度遍历的思想,在避免出现死循环上下了很大的功夫(最后还是出现了一个死循环Bug......)。

二、架构设计和OO方法理解演进

还记得学期伊始,第一次求导作业,我只有一个类,一个while循环,来一点输入,我就根据六种模式匹配解析一点输入,直接进行输出,采用的几乎是纯面向过程的思考方法。

直到第三次作业,面向过程的思路几乎不可能继续实现,被逼无奈之下,我只得推翻之前的设计,建立各项的类:sin类、幂函数类、符号类......来进行设计,虽然这耗费了我大量的时间,可我最终还是成功完成了第三次求导作业,而在这之后,我就渐渐抛弃了之前的那种傻傻面向过程的思想,对OO的独特方法有了更深的了解。

第二单元的电梯,多线程的思想又是一道难关,无法重现的bug、复杂的调度让我头疼不已,我同样耗费了大量时间对多线程的思想进行学习、理解,最终顺利地通过了这一单元。

就这样一点一点地进步,直到现在,我不仅掌握了继承封装、多线程等一系列设计思想,甚至开始有意无意地利用到一些典型设计模式,感觉真的是收获很大。

三、测试理解与实践的演进

先说调试,同样是学期伊始,第一堂实验课,任务就是找bug,而我连IDEA的调试键是哪一个都不知道(当然这只怪我寒假过于堕落),可谓惨不忍睹。

而到现在,在调试方面,我也不仅熟练地掌握了断点、单步、输出、小黄鸭等基本技巧,还学会了JUnit单元测试这样的高级方法,可以说是收获满满。

再进一步说到测试,之前的我基本上只会进行编数据-输入-人工比对这最笨的方法,现在我也会自己写一些简单的数据生成器和对拍器了,在测试的效率上有了极大的T提高。

四、课程收获总结

首先,不必多说,我学到了很多面下个对象编程的基本知识、设计思想、高级技巧,积累了很多面向对象编程的经验,我觉得这些都是十分宝贵的。

其次,我的单纯的编程能力,如何从问题出发找到思路,如何全方位测试等等也得到了很大提高,我认为这也将辐射到我C语言、C++的编程以及之后对于其他编程语言的学习上。

最后,我的抗压能力进一步提高了,头发进一步变少了(说明我真的变强了)。

五、三个具体改进建议

1.有的学习内容和最终的代码任务不匹配,比如JML单元,绝大部分同学都把精力放到了图的算法上面,而不是对JML语言进行学习掌握,需要课程组加强引导和设计。

2.课上实验显得有些鸡肋,往往学习内容还没有掌握就去上机,体验一般。

3.互测屋人数较多,根本没有精力阅读代码,大家都是盲狙,可能达不到预期的目的。

你可能感兴趣的:(oo作业第四单元总结暨结课总结)