BUAA OO 第四单元作业总结及课程总结
BUAA OO 第四单元作业总结及课程总结
一、本单元架构设计
本单元作业内容为对UML
进行建模解析,从而完成后续查询。需要我们完成对UML
图中信息的解析存储,是更加纯粹的面向对象设计。
第十三次作业
本单元第一次作业只针对类图进行解析,在官方已给的包中已有部分可直接用的元素,在此基础上增加一些官方包中存储信息不够的类,例如Class
、Interface
之类,以便更好地存储UML
信息。
第十四次作业
第二次作业增加了状态图和顺序图的查询,类似于上一次作业,把三种类型的图各自存储,便于解析查询。
第十五次作业
此次作业架构和上一次完全相同,只是增加了对UML
中存在的错误进行检查的方法,故不再放出类图。
二、四个单元中架构设计思维及OO方法理解的演进
第一单元--表达式求导
第一单元的前两次作业是最让人头疼的,在初步解除面向对象方法时并没有对架构设计有一个清晰的想法,在借助了训练和试验后豁然开朗,对架构有了清晰的认识,在学习面向对象过程中是一次大的飞跃,知道了继承和多态在解析表达式中的重要作用,完成了对整体架构的设计,也正因此,在第三次作业中基本没有改变第二次的架构就能完成。
第二单元--电梯
这个单元主要学习了多线程开发方式,加入了线程并发冲突的各种模型,整体架构也是以其中的“生产者消费者”模型来构建,在架构上并不需要特别设计,主要是处理多线程并发时出现的一些不可描述的错误。
第三单元--JML
这单元不需要架构设计,只要理解规格并将其实现,并且保证一定的复杂度即可,出错也主要在方法的时间复杂度上,虽说需要我们完成的任务体现面向对象思维并不多,但整体的社交网络就是一个面向对象很好的实例。
第四单元--UML
最后一单元相较前面单元的作业是更加纯粹的面向对象,实现了对UML
的解析和查询,对架构的设计其实题目已经大致框定了,要做的设计知识解耦和降低复杂度。
面向对象方法不仅仅是为了代码复用,而更多的是为了封装代码,对整体设计进行解耦,降低复杂度,将大的任务拆分成小的部分来完成。
三、四个单元中测试理解与实践的演进
第一单元
在第一单元中使用了Python
进行数据生成,配合 Sympy
库对程序运行结果进行检验,但针对于一些临界情况还是不能很好的生成数据,还需要手动生成。
第二单元
在第二单元完成主要功能的测试比较简单,依靠Python
生成的数据即可,但一些极端的数据较难想到。
第三单元
在第三单元使用了Junit
单元测试和黑盒测试,针对每次作业的核心算法构造出相应的数据点进行性能测试,但是忽略了部分看起来不复杂但时间复杂度较高的方法。
第四单元
在第四单元仍使用了Junit
进行测试,但数据的构造较为麻烦,故没有特意构造数据。
四、课程收获
- 学习了面向对象这一新的编程思想,理解了面向对象的特点及好处。
- 学习了
JAVA
多线程开发,学会了处理线程并发导致的冲突。 - 学会了规格的表示,能读懂并自己书写部分规格。
- 应用了多种测试手段,丰富了测试的能力。
五、改进建议
在博客周提前发布一些可选的预习任务或者资料,让同学们提前了解下一单元的内容
减轻互测的强度和次数,部分人不想耗费过多时间,而部分人多次hack甚至恶意hack,在同一组时搞心态
实验增加结果反馈