OOUnit4_Final

面向对象课程总结

第四单元

  • 由于每次作业都在上一次作业的基础上进行增量开发,而没有对原架构进行修改,故仅上第三次作业的UML图。

  • 整体上通过魔改单例模式的形式,每个需要的元素都在第一次遍历的时候通过静态图(或存在今天图中的相关变量)储存下来。

第一次作业

架构 :

  • 主要是在理解UmlElement的时候花了比较多的时间,好在最终还是理解了,并结合课件想清楚了需要存储的量,再加上课程组对查询指令等已经提供好了比较清楚的接口,以及指令没有太大的难度,故都比较快的完成了。
  • 由于需要考虑父类的相关变量,故设置了缓存,并且最终继承、实现等关系特定顺序存入已有的类图中,就不会出现元素不存在的情况。

bug分析:

  • 由于写的比较快,故在一开始出现了一些小bug,都很快解决了。

第二次作业

架构

  • 整体与第一次相同,多存了状态图和顺序图。

bug分析

  • 考虑到不需要对状态图的 PseudoStateFinalState 进行特别区分(查询指令不必区分),故将所有的 State 都存在了一起,导致出现了一些bug,而自己却只存了 UmlState 元素,其他两种元素都为不缓存,导致在访问 Id等变量的时候会抛出空指针异常。最终单独在每个State里存了相关变量。

第三次作业

架构

  • 整体与前两次相同,删除了一些无用变量,增加了一些相关变量

bug分析

  • 对于 InitialState 的迁出状态应该直接计算直接后继状态数量,而自己却直接写成了可达后继状态数量。
  • 对于判断循环的dfs方法没有想清楚,导致出现了可能把是循环判断为不是,不是循环判断为是的情况。并且由于对接口的循环判断效率极其低下导致一个点CTLE。
  • 对于接口父类是重复继承的情况,子类没有继承该标记变量,导致可能会遗漏子类的子类的 duplicated generalizations 情况。

架构设计及方法理解

​ 通过寒假预习作业及四个单元的学习,对面向对象的方法已经对象的封装等有了一定的认识。在阅读了一些优秀代码以后,也给自己的程序设计提供了一定的帮助。

​ 最开始写Pre的时候编程方法还是比较“面向过程”,在第一单元结束以后已经能够一定程度的封装对象,在第二单元结束以后已经能够在一个较为高层的视角分清楚每个类所应该做的,以及各个类之间的协作关系。三四单元主要是对给定东西的一点补充,但也使我在阅读官方包代码中体会到了良好的封装所带来的好处。

测试理解与实践的演进

​ 由于个人懒惰原因到最后也没有完成一次自动测评机的搭建,算是自己这学期的一个遗憾吧。

​ 很多次作业都由于时间匆忙而没有构造多少好数据,而大都是过了样例即结束。结果便是自己多次强测爆炸。

​ 最终也没能实现很多比较精妙的测试数据,而只是找一些简单的数据测测基础功能。

课程收获

  • 什么样的程序得什么样的分。这是这一学期最大的收获。很多次自己因为各种各样的原因浪费了许多时间,导致最后自己只能急急忙忙地写一个质量极差的程序来应付。这更多感觉是对自己的应付,结果也便是自己多次不仅强测没过,甚至弱测也没能过。
  • 对面向对象有了一定的认识。之前在了解面向对象的时候,总是一头雾水不知所以。经过了一个学期的学习,对面向对象的思想、方法有了一定的认识,JAVA语言也算入了门,虽然还有很多相关知识还不是很理解,但也算有了一定的知识基础。
  • 了解了一些设计程序相关的知识。曾经自己写程序只能写到哪里算哪里,对于各个函数之间的协同等也都是边写边改,甚至一些程序都只是在脑子里有一个雏形就开始写。现在学会了从顶层设计好各个类、模块之间的协同及各自作用,在编写程序的时候省了不少麻烦。

课程意见

  • 建议在实验以后给一些答案或者提示性的答案,或者结束以后给一些优秀的答案。做完实验以后总是对自己的结果总是不清楚,感觉就只是花时间做了题,却没有反馈。
  • 建议减少JML单元的作业量。感觉JML单元更多的是考虑算法,而不是考虑JML本身。
  • 建议平时研讨课可以留出几分钟老师来讲,或者提出一些引导性的问题供我们思考。

线上学习的体会

  • 线上学习无论是动力还是专注度方面都远不如在学校时,大多是个人原因吧。
  • 线上学习好处倒是可以看回放,可以反复观看自己第一次没看懂的地方。
posted @ 2020-06-18 20:34  LeiXiaaa  阅读(94)  评论(0)    收藏  举报