OO第四单元总结暨OO课程总结
作者:互联网
OO第四单元总结暨OO课程总结
一,第四单元架构
第一次作业
第一次作业是比较简单的,只需要分析类图即可。我的做法是在UserApi的构造方法中,先根据将不同类的UmlElement分开,分开之后,再根据题目的需要,进行操作。具体的划分如下如下:
private final ArrayList<UmlAssociation> umlAssociations = new ArrayList<>();
private final ArrayList<UmlAssociationEnd> umlAssociationEnds = new ArrayList<>();
private final ArrayList<UmlAttribute> umlAttributes = new ArrayList<>();
private final ArrayList<UmlClass> umlClasses = new ArrayList<>();
private final ArrayList<UmlGeneralization> umlGeneralizations = new ArrayList<>();
private final ArrayList<UmlInterface> umlInterfaces = new ArrayList<>();
private final ArrayList<UmlInterfaceRealization> umlInterfaceRealizations = new ArrayList<>();
private final ArrayList<UmlOperation> umlOperations = new ArrayList<>();
private final ArrayList<UmlParameter> umlParameters = new ArrayList<>();
在第一次作业中,作业要求实现的几个方法都没有太难,这里就不再赘述。
第二次作业
在第二次作业中,增加了对顺序图和状态图管理的需要。对于这些不同图,如果还使用第一次的方法,十分不便于管理。于是重构了一下代码架构,改为利用树形结构去存储UML图的各种元素。拿状态图距离,其结构为:UmlStateMachine--UmlRegion--UmlEvent,UmlTranslation,UmlStates...。同时,本单元的所有UmlElement都具有parentId这一属性,这使得构架树形结构十分轻松自然。
同时,本次作业中要求关键状态,这就需要检查图的连通性,我采用的是DFS算法,每次构建两个连通图,查询两次进行对比。
第三次作业
第三次作业可以继续沿用第二次作业的架构,只要将所有要实现的方法分配给对应的图就可以。同时对于查询循环继承以及重复继承,可以继续沿用DFS算法,因此相对于第二次作业,在实现上并没有特别大的困难。
二,架构思维与OO方法理解的演进
第一单元
在第一单元中,我对OO的方法的理解并没有特别大的提升。因为第一单元我偷懒,使用了预解析模式。在这个模式的帮助下,作业本身对面向对象的理解与运用要求并不是很高(甚至省去了解析函数)。所以在第一单元,我基本上还是沿用了数据结构的思路。但是第一单元的第二次作业,给我的印象比较深刻。因为在第二次作业中,虽然我使用的是预解析模式,但是还是需要利用递归的想法来进行解析式的化简。所以在那一次的作业上,我也第一次逐渐体会到了面向对象的含义。
第二单元
第二单元是我收获比较多的一个单元。在这个单元开始时,我对多线程毫无了解。甚至在第一次作业发布三天后,我苦思冥想三天,还是不能想明白怎么在实现消费——生产者模式,保证线程安全以及不会出现轮询。但是实验的代码给了我很大的启发。在实验后,我逐渐对实现多线程有了初步的想法。在这一单元结束后,我已经能够根据要求自主实现多线程的工作,同时保证线程安全以及线程防止轮询。同时,在这一单元中,因为有从单部电梯到多部电梯的改进要求,所以我在实现的过程中,对面向对象的对象属性有了更好的了解。
第三单元
这一单元是根据JML的规范化格式语言去完成代码。经过了前两单元的训练,对我来说实现这三次作业已经不在话下。这一单元主要的收获是对如何阅读JML语言有了一定的练习,同时在每次作业中,都会有一个关于图的算法,我也借此提升了我的算法能力。
第四单元
第四单元是要求解析UML图。我个人认为上手比较难,因为先要看懂给的数据是什么意思,以及先要大致了解官方包的一些结构和设计。但是上手之后和第三单元差别不大。不过这一单元训练了树状的结构架构,对架构优化思想的提升很有帮助。
三,测试理解与实践演进
第一单元
在这一单元中我还是使用手动构建测试数据,针对临界情况手动构造数据。由于式子经常很馋,所以构造起来比较麻烦。
第二单元
在这一单元中,输入输出量巨大,在这种情况下,我第一尝试构建自动评测。但是还是有一定局限性,只能随机生成数据,并且只能进行简单的测试工作,在具体问题上,有时还需要使用肉眼观察法。
第三单元
利用Junit进行测试,测试覆盖量大,保证程序正确性。
第四单元
首次尝试将画UML图与测试进行联系,在画UML图的时候,比较考验测试能力。
四,课程收获
- 极大提升编程能力,每四周产出1-2k行代码。
- 提升测试能力,学会编写简单的测试程序
- 学会许多工具,包括git,markdown,starUml等
- 深刻理解了对象属性
- 对程序的规范化要求有了一定的认识
五,改进建议
1.建议分配一点分数给寒假预习,增加大家对预习的重视程度
2.建议压缩第三单元时间,分一周时间给第二单元。我觉得没有必要追究每个单元时间上的平等。第二单元的难度就是高于第三单元的。并且,第二单元第一次作业难度过高,因为要在实现生产--消费者模式的同时实现电梯调度算法。我觉得这两件事应该拆开来,各占一周,这样的梯度更加合适。至于这一周的时间,我觉得要从第三单元抽取,因为第三单元本意是熟悉JML语言,但是这三次作业,每次作业对JML语言理解能力的要求并没有特别大的差别,只是在图的算法上有一定差别,并没有明显的梯度,不适合分开三次,所以建议压缩成两次,把时间分给第三单元。
3.建议第四单元采用更多的题目形式。我认为第四单元本意是熟悉Uml图的绘制以及熟悉用Uml图分析程序的方法。但是却溜了三次代码作业,我认为这不太合理。虽然有时博客作业会要求绘制类图,顺序等,但是都没有经过严格的评测,很难保证正确性,甚至在这种环境下,对于Uml严谨性的认识也会有所缺失。所以我建议增加第四单元评测形式,比如画严格符合代码的Uml图等
标签:OO,ArrayList,作业,总结暨,private,课程,new,final,单元 来源: https://www.cnblogs.com/yangxiao20373877/p/16416797.html