一、UML作业架构设计
1、第一次作业
其中 Main 是入口类,MyUmlinteraction实现了接口,UmlInteractionBase为MyUmlinteraction实现提供了底层功能,MyClass和MyMethod是一些UML元素的包装。下面是具体实现。
2、第二次作业
自己对三类不同的UML图分别进行了建模。另外自己将接口实现和核心功能提供分开处理。最后运用组合设计模式来实现总的功能。
二、四个单元中的架构设计及OO方法理解的演进
1、第一单元
自己第一单元并没有使用什么框架,主要是使用了接口作为各种函数的类型而可以统一处理,这样节省了许多无聊代码。
2、第二单元
自己的设计基于 blockqueue 框架。且三次作业都是同一个设计策略。
核心数据结构是一个阻塞队列,用于保存请求队列,其他模块主要是与该队列交互。
请求生成器:用于获得请求,并将请求加入请求队列。
请求调度器:用于将请求派给不同的电梯。
电梯:用于处理被分配的请求。
在第二次作业时,只是修改了电梯对于执行请求的策略,增加了捎带功能。
在第三次作业时,只是复制了两部电梯,其行为模式完全相同,但是请求调度器给其分配的请求种类有差别。另外,乘客在下电梯时,若其没到最终目的地,则由电梯修改其出发地后将请求加入队列。请求调度器无法区分由电梯加入的请求和请求生成器加入的请求。
3、第三单元
自己使用了分层接口来分解功能,并分层实行,使得可以把一个复杂的功能分解为从低层到高层的功能来逐步实现,易于实现和维护。
4、第四单元
自己将三种UML图分别建模,然后在一个总UML模型类中组合这些不同的UML图。
三、四个单元中测试理解与实践的演进
1、第一单元
自己没有采用系统性的测试策略来覆盖所有代码执行路径,只是随机想了几个数据点。在代码简单时这种策略似乎还可以,但是在代码稍微复杂一些时,我为此吃了苦头:自己互测时被?的好狠啊,结果只要一行代码就全部搞定了。如果自己做了覆盖性测试,就不会这样了。就是这个单元,让我明白了测试的重要性,让我明白了测试是代码编写的不可分割的重要一部分。
2、第二单元
这个单元我用了单元测试,可是对于多线程测试,确实发现其测试非常棘手。并且对于互测中发现的bug自己无法复现。这让我明白,如何做好测试也是非常需要思考的。如何看出bug样例的模式,并用最简单的样例复现错误,这是非常功夫的。
3、第三单元
第三单元我用了单元测试,并且使用了一定的测试策略,这次的效果还是可以。但是这个单元其实是JML的形式验证,但是自己感觉这个并不能很好发现bug。往往写出正确的规格需要对问题的很好理解,而bug的原因有很多是对问题的理解程度不够,因此我感觉JML规格除了让机器帮忙检查代码一致性问题外,在自己手中并不能发挥很大的作用。
4、第四单元
由于是在考期,自己没时间进行覆盖性测试,第一次还好,第二次就果然凉凉!看来自己必须把测试看作是编码的一部分,或许可以考虑先写测试。
四、课程收获
这学期的OO自己感觉学到了不少东西。首先自己学会了java语言的基本操作。并且自己学会了OO的思想,学会了多线程编程,还了解了JML和UML。回想自己奉献给OO的多少个周末,多少个凌晨,现在回想起来,感觉还是颇值。
五、具体改进建议
1、实验作业的定位不够清晰。这学期早上学习新内容,下午做实验,但是自己做完实验后是懵逼的,感觉时间很紧。个人觉得如果实验的目的不是考核,而是帮助理解所学内容的话,应该允许实验内容没有做完的可以课后继续做,且给出答案,这样利于进步。
2、JML单元感觉有些不够完善。自己是体验了不少内容,可是只是限于体验而已。
3、研讨课交流环节互相可以改为小组交流或者代码评审。