OO第四单元总结

本单元三次作业的架构设计

本单元三次作业没有进行重构,架构相似。

第一次作业

类图如下:

为了方便处理,我自己新增了MyNode类,作为UMLClass或UMLInterface,其中新增fathers、sons、attributes、operations、associations和realizations便于对相应的元素进行处理,这样也方便进行管理和查找;同时新增类MyOperation,为其新增parameters变量;同时新增类MyUmlMap,在其中完成模型的构建;此外对于单个类级别的方法在MyNode中实现,对于Map级别的方法在MyUmlMap中实现,MyUmlInteraction中仅有myMap这一属性,通过调用相应已经实现好的方法完成接口的实现,避免了类的长度过长;本次作业相应的方法实现较为简单,但是要注意在实现getImplementInterfaceList方法时,要标记已经访问过的接口,不然在菱形图的查新中会超时。

OO第四单元总结_第1张图片

第二次作业

第二次作业在第一次作业的基础上增加了顺序图和状态图的构建和查找。为此在第一次作业的基础上我增加了MyInteraction类、MyLifeline类、MyState类、MyTransition类、MyUmlMachine类、MyUmlRegion类,与第一次作业类似,对于那些包括在某元素中的元素,在相应的类中增加相应的属性。在MyInteraction类中增加messages、lifelines、标记endPoint个数的属性,在MyLifeline类中增加incomingMessage和type属性标记其是lifeline还是endpoint,在MyState类中增加reachStates,并增加type属性标记其类型,在MyTransition类中增加events和behaviors属性(尽管并没有用上),在MyUmlMachine类中增加属性region,在MyUmlRegion类中增加属性states、transitions、beginstate、endstate。在MyUmlMap中增加对顺序图和状态图的建模过程。同样的,在相应层次进行方法的实现,然后在MyUmlGeneralInteraction中直接调用即可,方法都较为简单,不多赘述。

类图如下:

OO第四单元总结_第2张图片

第三次作业

类图如下:

在第二次作业的基础上增加了对图的检查,所以新建一个MyCheck类,实现方法较为简单。其中相对复杂的为循环继承的判断,为了保证正确性,在讨论区大佬的提示下,我采用遍历所有class判断每个class能否通过继承回到自己的方法来判定是否存在循环继承。

OO第四单元总结_第3张图片

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

在完成第一单元作业时,着实对面向对象摸不着头脑,三次作业几乎都是面向过程写下来的,也确实尝试应用设计模式但是无奈思路受阻、下笔十分之慢,还是屈服于了面向过程,架构也是比较丑陋;在学习第二单元作业时,开始对面向对象有一些理解了,初步有了一个模块做一件事、各模块间独立等等这种面向对象典型思维,架构方面更加注重功能单元的高内聚、低耦合了,但是架构仍然不能很好地满足扩展需求;在学习第三单元作业时,一开始并没有意识到架构的重要,只是照着JML注释翻译代码,随着需求的增多和难度加深,才意识到架构的重要性,对于面向对象方法方面感觉体现得不是很明显;在第四单元中吸取了第三单元的教训,建立了自己的map类等,在架构上好看了一些,满足可扩展性方面还不错,对oo方法中的抽象、分层等有了进一步理解。

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

测试实践方面我个人做得不是很好。在前两个单元主要采用手动测试特殊数据的方法,这种方法在第一单元确实行得通,但是在第二单元的多线程部分就显得力不从心了,所以我的第二单元成绩也比较惨。在第三、四单元主要采用Junit测试,这样测试确实找到了很多bug,但是一些极端数据等仍然需要认真思考,并不是简单的Junit测试就可以找出极端数据所测试出的bug的。在测试的理解方面,刚开始接触这门课程时,不是很喜欢测试,对程序的测试也不是很充分,也不理解为什么要做那么多测试,认为输入几个样例得到正确结果就可以了,但是渐渐地通过学习我认识到了测试的重要性,能够写出满足基本功能的程序并不难,难的是写出能够经受各种测试——包括性能测试的优质程序,并且我深刻地认识到你永远不知道自己的程序会出现什么奇怪的bug,可能是种种巧合拼凑在一起就成就了一个bug,可能是忽略了一个条件就成就了一个bug……,所以大量的、有质量的测试是极其必要的。

总结课程收获

回望这一学期的oo之路,真是披荆斩棘,着实不易,收获主要有以下几方面:

(1)学会了java语言,学会了工厂模式等设计模式,了解了多线程、JML、UML的应用。

(2)了解了抽象、分层等设计思想,对于以后的学习工作很有帮助。

(3)极大地提高了个人的抗挫折能力,练就了平和的心态,个人认为oo课程的魅力在于付出多少,就会得到多少回报,可能开始接触一个新知识时束手无措,但是只要坚持下来,摆平心态,克服挫折,你就是最靓的崽。

给课程提三个具体改进建议

(1)个人认为多线程第一次作业难度略大,当然也是因为我太菜了,希望能适当均衡一下难度。

(2)理论课的讲解有时会出现学用脱节的情况,希望理论课不那么晦涩。

(3)个人认为类似第三单元这种可以适当给出提示建立图结构,可能大佬并不需要,但是我这样的菜鸡确实没有这个意识。

线上学习oo课程的体会

(1)线上学习理论课更加方便,有不懂的地方还可以回放反复观看

(2)和同学交流不方便了,没有以往线下面对面讨论的感觉了

(3)上课没法见到老师,还是有点失望的,还是非常期待和老师在课堂上交流的感觉的

(4)感谢老师和助教的辛勤付出,我从这门课中学到了很多,希望oo这门课越来越好!

你可能感兴趣的:(OO第四单元总结)