面向对象第四单元总结
本单元架构设计
- 第一次作业,实现一个uml类图的解析,我用了一个HandleElement类来处理和保存各种UMLElement,并且提供查询接口,并且对与class、interface等等,新建了对应的类,如MyClass , MyInterface来预处理相关信息,在读入数据完成之后,dfs预处理各种查询。
- 第二次作业,增加了顺序图和状态图,于是有三个类,分别处理类图,顺序图与状态图。主要查询和处理方式与第一次作业相同
- 第三次作业,进行有效性检查,为了方便数据的处理,我直接在处理三种图的类里面直接内置了有效性检查函数,如果发现错误,就停止预处理,记录相关错误信息。在进行多继承判断的时候,原本是考虑等信息全部处理完成,再挨个判断是否有重复继承出现,但是这种情况会被菱形图卡掉,所以在更新信息的时候就要进行多继承的处理和标记。
四个单元架构设计与oo方法理解
第一单元
主要是实现了表达式求导,这一单元主要运用的模式是工厂模式。学习了层次化的结构设计,理解了面向对象的设计思维,和继承多态等等面向对象特性。
第二单元
这一单元主要涉及多线程,主要运用了生成者消费者模式,并且理解了多线程的编程思维和线程安全与死锁相关知识。
第三单元
这一单元主要学习了契约式编程,学习并且使用JML进行开发。
第四单元
这一单元主要学习了UML这种抽象的建模语言。
四个单元测试理解与实践
前两个单元我都懒得写自动化测试,主要还是靠自己在读题的过程中想到的一些可能存在的坑点进行手动构造数据测试,第一单元我只是简单的写了个正确性判定的小程序,第二单元写了输入程序。不过从强测和互测的结果来看,效果还算不错。
后两个单元主要靠随机数据生成和与同学的代码进行对拍,这种指令型的数据手动构造太麻烦。至于课程推荐的junit,确实在一些应用场景下有较好的效果,但是对于我们现在的作业,针对每个方法单独测试也需要庞大的预读取的数据进行支撑,所以还是直接随机数+对拍效果最好。
课程收获
- 初步掌握了面向对象的思维方式,并与面向过程的思维方式区别开
- 初步掌握了java语言
- 掌握了多线程的思维与编程方式
- 了解了JML与UML等常用建模语言
改进建议
1、JML工具链实在是难以使用,虽然我们完成第三单元的作业并不需要这些。
2、第三单元的作业是不是可以改一下,既然目的是基于jml的契约式编程,是不是可以考虑将学生们分组,同时体验实现者和jml编写者。
3、每隔一周的实验是不是可以改进一下,例如公布成绩答案与讲解
线上学习体会
虽然不能与老师同学面对面交流,但是线上课程可以随时观看,比线下学习效果好太多。