BUAAOO-第四单元总结

1.总结本单元架构设计

  第一次作业:

  

  第一次作业只有类图相关的元素,我按照树形结构,在MyClass和MyInterface中包含了MyOperation和attribute,在MyOperation中又包含了parameter,在UmlInteraction中对MyClass查询来完成指令。

  第二次作业和第三次作业:

  

  第二次作业和第三次作业的结构是相同的,关于类图的部分和第一次作业相同,关于顺序图和状态图部分采取和类图相同的树形结构存储,状态转移图中由StateMachine包含Region,Region中包含了State,State中记录了状态转移,状态转移中包含Trigger。对于顺序图,由Interaction中包含lifeline和endpoint,lifeline中记录自己发出和接收到的信息,在UmlGeneralInteraction中对最顶层的类进行查询,如MyClass,MyStateMachine,MyInteraction,来完成指令。

  第三次作业比第二次作业多了8个合法性检查,其中R002-R004比较困难,是判断循环继承和重复继承,其中循环继承,我通过遍历一个类(接口)所有的父类,如果其中含有自己,则存在循环继承情况(因为本单元数据量较小,这样不会花多少时间),重复继承在判断循环继承的过程中就可以判断出来,但是先保留下来,如果没有循环继承情况,再报重复继承的错误。

2.总结自己在四个单元中架构设计及OO方法理解的演进

  第一单元:

  第一单元是我对面向对象印象最深刻的一单元,第一次作业完全不懂架构和面向对象思想,导致第二次作业直接重构,这一单元我将sin,cos,x等元素都建立一个类分别管理,还有项类和表达式类来进行管理,每个类有各自的求导和输出函数,其他类不需要关注这个类如何实现,只须要知道方法的结果就行。这一单元对我面向对象思想有最大的帮助,也只有这单元我的代码经历了重构。

  第二单元:

  第二单元是介绍多线程,我采用了生产者消费者模型来完成这单元作业,对于锁,我在所有的临界区域都加上了锁,保证了获取的数据都是正确的,本单元只要在线程结束时正确的解开锁让程序结束,难度并不大,在性能上用look算法就可以有一个不错的性能分。

  第三单元:

  第三单元介绍了JML,本单元的架构基本由课程中给出了,我们只需要根据JML的描述来完成其中的方法就行,因为不用自己设计架构,所以本单元是OO课程中最简单的一个单元,并且因为每个方法的规格由JML描述,所以我们可以很清楚的知道这个方法要干什么,本单元只要注意性能问题就没有大问题。

  第四单元:

  第四单元介绍了UML,本单元可以说是除了第一单元以外最困难的一单元,架构的话就像上面所说的,用树形结构来存储各个元素和它们的信息,通过调用特定的方法来完成查询,本单元困难在于课程组提供代码中有许多我们要理解的东西,但是指导书对它们没有说明,需要自己好好理解。

 3.总结自己在四个单元中测试理解与实践的演进

  我自己是没有使用评测机来测试自己的代码的,在前两个单元我都是手动构造几组特殊的数据,如果结果正确那么就不再测试自己的代码,认为代码已经没有bug了,对于第三单元,因为各个方法的规格十分明确,我直接比对直接的代码是否符合规格,只需要很简单的数据来测试代码,最后一单元我基本上还是和第三单元一样,直接阅读自己的代码,确认代码的实现和自己想象的一样,没有怎么认真测试,总结下来就是,在前两个单元采用构造特殊数据来测试,后两个单元直接就是肉眼debug。

4.总结自己的课程收获

  面向对象课程确实给我带来了很多收获,首先是面向对象的思想,很难想象如果按照以前的想法写完第一单元会是什么样的代码,并且各个单元都有不同的作用,第一单元教会了我一个好的架构是多么的重要,第二单元教会了我如何使多线程安全,第三单元教会了我怎么读JML规格,第四单元让我更清楚的了解了UML图的结构,每个单元都有收获,最重要的还是让我了解到了好的架构的重要性和编程思想。

5.立足于自己的体会给课程提三个具体改进建议

  1.第一单元的第一次作业和第二次作业难度的跨度太大了,建议加大些第一次作业的难度,降低些第二次作业的难度,而且这个时候我们都是初学面向对象,基本上这两次作业之间一定要重构。

  2.希望第四单元可以有更清晰一些的指导书,好歹告诉我们Umlelement就是那些UML图中的元素,这样可以大大降低理解第四单元的难度。

  3.第二单元的互测一个数据进行多次测试,第二单元有些bug时有时无,有时候运气好没有发生,就又要等15分钟才能再次提交数据,效率太低。

posted @ 2021-06-25 22:43  zty1469  阅读(58)  评论(0)    收藏  举报