(1) 总结本单元两次作业的架构设计
第四单元第一次作业中我采用MyUmlClass类存储每个UmlClass中的所有Operation,attrubute,和这个类所实现的所有接口(包括直接实现的接口和通过接口继承实现的接口)。然后用一张图存储Class之间的继承关系,另一张图存储Class之间的关联关系。这样基本上所有问题的解决都比较常规,我自己在强测中主要问题在于没有考虑接口之间的继承关系,基本上强侧就凉凉了。
第四单元第二次作业中加入了状态图和顺序图,其中顺序图的操作及数据结构都很常规,就不赘述了。状态图中求所有后继状态比较费劲,我直接用dijskala遍历所有状态求出最短距离,而距离不是正无穷的就是后继状态。实践复杂度有点高,但所幸在强测里面并没有TLE。强测中出的一个bug是本单元第一次作业规定至多有15个类,所以我就把继承的图的大小设成了15,这次忘记改了导致数组越界。
感觉本单元作业主要的难点在于需要仔细阅读下发包中的代码,必须读懂了才能开始写,所以需要读较大量的代码,难度较大。
(2) 总结自己在四个单元中架构设计及OO方法理解的演进
第一单元第一次作业的时候对面向对象完全没有概念,就一个类写到底,非常面向过程。第一单元学完后就开始会运用类、接口和类的继承了,程序的结构清晰了不少。
第二单元开始学会运用设计模式,尤其是对观察者模式和工厂模式都有了实践的应用。
第三单元了解了规格化设计的模式,能够读懂JML规格并依据规格补全代码。
第四单元理解了UML类图、状态图及顺序图结构,能够通过事先设计好UML图写出架构更合理的恶程序。
(3) 总结自己在四个单元中测试理解与实践的演进
第一单元的时候测试完全靠手,还有就是靠读代码,由于wrong format的错误比较好找,也没觉得有什么问题。
第二单元还沿袭第一单元的测试方式,但由于多线程的不确定性,这样测试效率很低,强测中吃了很大亏。
所以第三单元的时候就按照第二单元研讨课上大佬分享的方法写了简易的对拍器&数据生成器和朋友对拍debug
第四单元由于Uml图不好生成数据,就又回到手动测试了。
(4) 总结自己的课程收获
面向对象这门课虽然很肝,但是真的收获也很大。从这个学期一开始的时候即不会写JAVA也不会写面向对象的程序,到现在基本可以用面向对象的思维模式解决问题了。并且学会了多线程的基本应用,能够读懂JML规格、看懂UML图。最重要的是,从原来拿到一次作业立刻开始写,到现在会先设计出类的层次与数据结构等架构在开始,可以在根本上避免很多重构。
(5) 立足于自己的体会给课程提三个具体的改进建议
1、 希望第三单元JML部分淡化一点数据结构的成分,给我们更多写JML规格的练习。
2、 希望能够多线程部分可以讲得再慢一些,因为之前完全没有接触过多线程和锁的概念,感觉第二单元的理论课有些跟不上。
3、 希望寒假预习的时候能给我们发一些JAVA入门的教程,感觉写第一次作业的时候不少同学都跟我一样完全不会写JAVA,所以第一次作业感觉比较吃力。