OO第四单元总结
一、总结本单元三次作业的架构设计
(1)第十三次作业

在这次作业中对UmlClass、UmlInterface、UmlOperation和UmlAssociation进行了重新封装,根据需要实现的查询功能实现了一些新的方法。在MyUmlInteraction类中需要进行查询时只需要在对应的类中调用相应的方法即可。
这次的作业中遇到的bug有:
(i) 查询类实现的所有接口时出现遗漏的情况,原因是对接口的概念不清,没有处理好多继承的情况,在接口类中只分配了一个MyUmlInterface来储存父类接口,后将父类接口存储在ArrayList中解决了这个问题。
(ii) 查询类是否违背信息隐藏原则时出现了错误的判断,原因是没有考虑父类,将父类中的属性一并检查后解决了该问题。
(2)第十四次作业

第十四次作业在架构上基本沿用了上一次作业,将原先MyInteraction类改为MyUmlClassModelInteraction,并在MyUmlGeneralInteraction类中继承这个类,实现对类图的处理,而在MyUmlGeneralInteraction类中实现对顺序图和状态图的处理。对UmlInteraction、UmlStateMachine、UmlTransition、UmlState进行了重新封装,根据需要实现的查询功能实现了一些新的方法。
这次作业中遇到的bug有:
(i) 查询给定状态机模型和其中一个状态,有多少个不同的后继状态时,由于采用递归的方式进行查询,没有对结束条件进行良好的设计,导致查询过程中出现了无线循环的状况,造成了Runtime Error,对递归结束的条件进行重新设计后解决了这个bug。
(3)第十一次作业

第十五次作业在架构上基本沿用了上一次作业,根据错误检查的要求在MyClassInteraction中实现对类图中的错误的判断方法,在MyUmlGeneralInteraction实现对顺序图和状态图中的错误的判断方法,在结束UML图的输入后自动调用这些方法进行检查。
这次作业中遇到的bug有:
(i) 对R001错误,即判断类中元素重名时,只考虑了属性与属性、属性与关联对端所连接的UMLAssociationEnd之间不能重名,而在该类的关联对端所连接的UMLAssociationEnd之间的重名则没有加入判断,处理该情况后则解决了这个bug。
(ii) 对R004错误,即类重复实现接口,在检查时由于会将该类本身直接实现的接口重复加入已实现接口的列表,导致所有对接口进行了实现的类都会报R004错误,后对接口只进行一次判断,修复了这个bug。
二、总结自己在四个单元中架构设计及OO方法理解的演进
在第一单元时,可以说对面向对象完全没有头绪,前两次作业根本就是面向过程写的,在第三次作业时对程序进行了重构,设计了一个item类,并针对加减运算、乘运算、三角函数等继承item类实现对应的类,分别在这些类中实现他们自己的求导方法,在主程序中调用,才勉强有了一些面向对象的影子。
第二单元学习到了生产者-消费者模式,初步了解了多线程。
第三单元学习了JML语言,可以根据JML语言进行编写程序,也可以自己编写JML语言进行标准化描述。此外,还学习了利用JUnit对程序进行单元测试。
第四单元学习了UML图这个可以对程序进行抽象化和可视化的工具,在这一单元的作业中的整体程序架构可以说是面向对象了,经过了一个学期,对所谓的面向对象终于有了比较到位的理解,在每一次发布新的作业时不需要对原先的程序进行重构,只需要针对新的功能加入新的对象和方法即可。
三、总结自己在四个单元中测试理解与实践的演进
由于个人能力问题,我的测试主要是通过手动提交测试样例进行的,第三单元学会了使用JUnit对程序进行单元测试。
四、总结自己的课程收获
最大的收获在于对面向对象编程的理解,通过面向对象的方法,在进行程序架构的设计时会进行更完善地考虑,不仅 要实现这一次地功能,也要考虑后续程序的扩展,如何使得程序在加入新功能时不需要进行很大的改变,更不需要进行重构。此外就是学习了JML、UML、JUnit,以及一些其他工具的使用。
五、立足于自己的体会给课程提三个具体改进建议
(1)个人感觉第四单元的指导书内容的自然语言描述有些不严谨不完善,导致我对指导书的理解与课程组的要求不一致而造成bug,希望能够完善指导书这方面的内容。
(2)希望能够对每次的实验结果进行反馈,能够了解自己的不足。
(3)希望能够减压...
六、谈一谈线上学习oo课程的体会
其实感觉与线下学习差别不大,就是从去教室学习变成了看视频学习,把课上交流移到了微信群中,以及实验不需要去到实验室,相信认真学习的同学也能在这门线上课上学到很多。

浙公网安备 33010602011771号