BUAA-OO-UNIT4-UML-总结

一、本单元作业的架构设计

本单元的难点就在于架构设计,需要充分理解UML的各个元素成分。本单元作业属于上手难,加工简单的类型。在实现过程中,为了实现具体的官方没有给出的方法,我将官方的各个UMLElement都变为MyElement,通过传入对应的UMLElement进行实例化。对于每个class,赋予原有的属性(例如name, id等),和官方属性不具有的属性(例如相关联的class的id)。在这样的架构下,对于提出的任何查找请求都能够很方便地增添属性和方法。

由于并没有很明显的继承关系,所以本次作业的类图就不做专门展示了。在下面的图中,可以很方便地通过名称看出我的各个element。

图中model为模型图,sequence为时序图,state为状态图。

本次作业在算法方面主要考察了图的查找,我基本采用了栈存储的DFS,能够解决几乎所有问题。但是美中不足的是,由于第一次作业存在的bug,我第二次作业并没有通过,这让我感到非常的遗憾,已经在补给站的门口徘徊。所幸的是第三次作业最终没有卡住,还是完成了弱测。

二、在四个单元中架构设计及OO方法理解的演进

在OO课程四个单元中,我认为第一单元最不具备面向对象的特性,只能说采用了一点封装的特性。第二单元是最具备OO特性的实验,需要自行设计电梯模型,理解面向对象的特性,理解多线程中锁的应用,具有挑战性。虽然我完成的并不好,但是这一单元确实是有必要修习的。第三单元的规格实际上应该是我们对OO思想的初认知,理应放在最开始学;而第四单元UML是对JML的提升,让我们对面向对象有更深刻的认识。我觉得我们应该知道的是,面向对象绝不仅仅是封装继承和多态,它代表一种以对象看待事物的思想,让我们把共同特性聚合在一起。

如果要说这四个单元,我更建议取消第一单元更换成别的题目,其它三个单元的新顺序为JML,UML,电梯。

三、在四个单元中测试理解与实践的演进

在四次作业中,我基本没有设计什么评测机,不像大佬那样分分钟用上万个数据来轰炸自己的代码。我的做法仅仅是通过前期艰难的设计确保在结构上没有大问题,然后通过课程网站给出的样例进行单步debug。在电梯单元由于对于线程安全的理解不到位,我做了很多失败的尝试,仅仅在第三次作业才完成,感到十分懊恼且无可奈何。我认为课程组给出的帮助实在是太少了,根本就不能让我有任何进步。在了解线程安全容器之后,我发现我对于同步的纠结完全是不必要的。

在后续作业中,我学习了根据junit进行测试的方法,但是由于时间关系我仍然是基于单步调试进行测试的。

我对于debug的理解是,无论采取是么样的方法,我们都需要足够的测试数据来对代码进行冲击。同时我们需要能够得到正确答案的对拍器。当bug不一定具有可复现性时,只有从数量上来弥补质量问题。总而言之,如果你不是一个好的无bug选手,那么耐心就非常重要。

四、总结自己的课程收获

这一段有很多话说,但是其实到手下也没什么能敲出来的。在一学期的OO课程学习中,我只有深深的无力感。我对于各个方面的研究没有方向,大多求助于同学。我曾经向助教和老师求助过,但是并没有得到实质性的帮助。但是幸运的是一直有很多的同学和和我同病相怜的学长能够对我进行指导,在我有问题的时候能够给予帮助,提供一些特殊的测试样例。很多同学能和我交流代码中出现的问题,让我最终能够只有4次无效作业。

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

  • 可以完善题目,但是不要逐年加码。

  • 希望改革制度,例如延迟一天交作业的按照80%比例给分,延迟2天按照60%比例给分,不要随便就给我判了死刑。(虽然我知道课程组肯定不会采纳这条)

  • 改变作业顺序,把JML和UML放到前两单元,并且取消多项式单元改为其它作业。

posted on 2021-06-25 09:58  Teacc  阅读(83)  评论(0)    收藏  举报