OO第四单元总结&学期总结
- 第四单元架构设计与分析
- Uml图
![image]()
- 架构分析
本单元的作业是通过对解析出的UMl元素进行Uml图数据结构的搭建,以实现查询,格式检查等功能。官方包里的各种Uml元素类不足以满足功能的需求,且构造器都为私有构造器,因此通过组合的方式去拓展新的功能是一种比较可行的方式。我在每一个自己实现的元素类中,都包含了一个官方包里的元素类,在构造时只需要将转型好的元素的引用赋给属性。
此外,为了简洁、统一的对八条规则进行查询,我将自己实现的GeneralInteraction和MyStandChecker进行了组合,在调用时形式比较简洁
![image]()
- Uml图
- 四个单元中的架构设计及对OO的理解
- 第一单元
![image]()
在学习第一单元时,由于对语言以及面向对象的思想不够熟悉,因此在作业中出现了大量面向过程的痕迹:一个类中总是有各种各样的函数来辅助一些功能的实现、抽象层次不够。在前两次作业中体现出来的就是多种因子共用Term这个类,没有向下为每种因子都具体实现一个类,造成了类的臃肿以及结构的不清晰。在第三次作业中,我对于抽象的把握要好了很多,把该分的层次都分了出去,在求导时运用了多态进行逻辑的简化。
与此同时,在本单元的学习中,我不仅认识到面向对象层次化思想的重要性,还认识到了面向过程与面向对象思想结合的必要性,在第三单元中使用了看似极为面向过程的递归下降分析法,却使解析表达式的思路变得清晰、手段变得精准。 - 第二单元
![image]()
第二单元是多线程编程的单元,相比起第一单元从面向过程到面向对象的思想过渡,本单元从单线程编程到多线程编程则实现了更大的跨越。在刚接触电梯时,常常会感受到思路不清晰,出现bug也不能采用传统的断点debug模式。在架构设计时现在印象比较深刻的是广泛的使用生产者-消费者模式,以及广泛地使用缓冲队列来提高效率。
此外,在本单元中也开始尝试使用简单工厂模式来生成新的电梯,隐藏掉具体生成过程中的细节。 - 第三单元
第三单元是关于JML规格的训练,对于架构设计几乎没有要求。在本单元的学习中,我的体会是规格是一种十分严谨的形式语言,可以准确定义函数的行为,定义类的属性,但在具体实现中可以加入算法和效率的考量,定义不同的数据结构,定义其他实现算法的函数,有一种“带着镣铐跳舞”的感觉。 - 第四单元
第一部分已经分析,在此不再赘述。
- 第一单元
- 对于测试的理解
经过四个单元的训练,我认识到了测试的重要性(尤其是第三单元!!!),即使弱测中测都十分幸运地AC,到了强测仍然有WA声一片的可能性。另外,老师在理论课上也反复强调软件程序测试的重要性,bug是程序的固有属性。在几个单元的磨砺之下,我掌握了两种测试方法。- 黑盒测试
这里主要是评测机随机生成的数据对程序进行测试。若测试结果和预期不一样,则可以通过出错的数据点找到涉及到的函数进行debug。通过这个手段可以检测大部分功能的完备性。 - JUnit测试
JUnit测试需要人工编造数据,他的好处是可以根据每个函数实现的逻辑和前置条件来编写一些边界数据,可以有效地检查边界情况。
- 黑盒测试
- 课程收获
在这学期的OO课程学习中,首要的便是入门了面向对象编程,了解了面向对象编程的许多思想,例如抽象、多态、组合、可见性等。其次便是大大增加了coding能力,克服了以前对于几百行代码开发的恐惧。最后我认识到和别人交流的重要性,一次好的交流可以使自己对自己实现思路认识得更清晰,可以使自己接触到很多新奇而有趣的思想。 - 改进建议
- 第一单元的难度很大,并且那时候对于java和面向对象思想不怎么熟悉,上手起来比较困难,建议在第一单元之前进行一个小的单元,用来训练语法和基本的抽象层次化设计(即使这学期有pre,也起到了一些效果,但对于架构设计训练来说不够有力。
- 实验课程可以开设的稍微早一些。在每单元接触新的内容时,OO实验往往能帮我初步入门该单元的内容,可以说非常有用,但就这一学期来说,OO实验课安排在周五下午,入门之后留给我们思考、实现、测试的时间并不充裕(这里只对于我这样基础稍差,比较依赖实验课入门的人)
- 最后谢谢同学和助教在讨论区的热心解答,在讨论区中我学到了很多知识,愿OO课程越办越好!




浙公网安备 33010602011771号