OO第四单元总结
OO完结标志,作为一名18系学生,OO对我来说是一门可选课程。无疑对我具有不小的难度再加上一开始很差的风评,再加上缺少java基础。让我犹豫是否应该选择OO这门课程。但是伴随着一个学期的学习,OO画上了句号。我看到了OO课程肉眼可见的重大改革。感谢老师,助教们的付出。
第十三次作业
类图如下,为了防止过大模糊完全看不清楚,没有包含MyUmlInterfaction的接口实现。这是本次作业中包含的4个类,
Main为程序入口。
MyUmlInterfaction为程序主体。 MyUmlClass为对UmlClass及其各种属性包括Attribute,Operation,FatherClass,InterfaceRealization等的封装。封装方式采用HashMap<String,ArrayList<String>>去存储方法,具体为<id,list> 其中 list:ArrayList<String>,list[0]:方法名称 list[1]:方法可见性 list[2…n]:参数列表。 采用了两个HashMap<String, HashMap<String, String>>
这种双重HashMap的结构去存储类属性与实现接口。同时便于要求指令的查询,不使用无脑的遍历。MyUmlInterface为对UmlInterface各种属性的封装,主要包括父接口属性(ArrayList<MyUmlInterface>)
第十四次作业
类图:
相对于上一次作业抛去必须实现的MyUmlGenerakInteraction最大的区别在于多出了MyUmlInteraction以及MyUmlStateMachine这两个类。
MyUmlInteraction类为对顺序图的封装,包含lifeline,message等信息。 MyUmlStateMachine类为对状态图的封装,包含state等属性的各种信息。
四个单元的架构设计及OO方法理解的演进
第一单元:表达式求导
这一个单元中,我开始努力的改变自己长时间面向过程的思维方式,第一次尝试采用继承,接口的方式去实现自己的程序,尝试了很多java的语法,对java开始熟悉。 第二单元:电梯调度 这个单元可以说是我再OO课程中收获最大的一个单元,他真正让我通过自己动手实现理解了面向对象的思维方式。再第二单元第一次作业(傻瓜电梯)结束之后。我开始了对自己傻瓜电梯的重构,第一次开始在确保了正确性的情况下开始考虑了自己程序的可拓展性以及可维护性。通过长达一天的不断架构我第一次完成了自己第一个面向对象程序的重构。这次重构给我带来的可扩展,可维护性让我在这个单元的后两次作业当中,只需要对自己的代码进行添加,而几乎完全不用做出任何修改。出现的bug也是少之又少。正确性的保证让我开始有余力去尝试各种电梯调度的算法开始追求性能。第二单元让我体会到了面向对象架构的魅力,从这个单元开始,我开始将更多的时间花费在了架构设计之上。可以说这个单元是我面向对象思维的启蒙。 第三单元:契约式编程 这个单元包含了数据结构与图论算法等内容,在学习这个单元的过程中我被迫温习了很久去年数据结构的内容。但是在学习完JML之后,当我在设计架构的时候,我开始将部分我已经觉得很清晰的架构开始使用JML去表示,虽然是手头表示,真正的准确性以及格式都有所欠缺。但是我的构架方式已经从普通的想法或者简单的手画图开始想真正的逻辑规则转移。我与朋友之间的交流障碍也随之变小。 然后便是Junit,这个单元中认识了Junit,我开始通过Junit开始对我的程序进行回归测试。我认为这是一件很酷的事情,但也伴随着一些不好的地方 (不能假装bug不存在了) 第四单元:UML 这个单元对我最大的提升在于,我开始抛弃我surface上的OneNote了(画出来的太丑了),开始使用怎么画都不会丑的StartUML了……而且加上StartUML拥有配套导出java代码的插件。我开始通过StartUML的类图做一些简单的架构设计。对复杂的情况会加入时序图与状态图。
在四个单元中对测试的理解与实践的演进
通过第一个单元的学习我体会到了测试的重要性,如果弱测通过但强测很惨必定存在测试不充分的情况。而在第三单元接触到Junit之后,不断保存测试数据,扩大自身的测试集合,保证了每一次测试都是已经进行了回归测试让我的bug数量大幅度减小。 而据说bug最为恐怖的第二个单元,由于我个人的架构很符合自己的思维方式,导致我写出来的代码几乎不存在多线程方面的bug,经过一些测试保证了正确的情况下。花费了很多时间去追求性能。 JML测试对我就比较恐怖了,由于我的电脑发生了一些玄学情况。环境真的难以安装。因此对JML我更多采用肉眼测试………….
总结自己的课程收获:
开始对面向对象思维熟悉,深刻体会了面向过程思维的局限性。简单学习了函数式编程的思想。扩展了自己的知识面。
以及,写了不少代码,写出了很多bug。但是也做出了几次让自己比较满意的重构,体会到了一个好架构带给人的幸福感(bug少了很多)。明白了架构的重要性。
开始理解测试的重要性,以及回归测试的重要性。
对课程的建议:
一.作为一个经常在B组的辣鸡,每次听到助教谈及B组bug少的原因只是没有被找出来。性能弱正确性也差(其实在我看来B组其实是舍弃了性能追求正确性的摸鱼躯体)。我对此经常表示不服,因此想开放A组hack成功的数据集合,对B组,C组bug修复后进行测试。看看自己的程序是否真的存在当前并没有测试出现的bug。
二.希望能够开放之前的作业评测,有些代码重构了但是却无法验证正确性,未免有些可惜。 三.实验课直接考核上午理论课学习的内容未免有点魔鬼,希望可以错开一周时间。
写在最后:
通过这学期对OO的学习,我感受到了一个和往届学长学姐口中感觉不一样的OO,去年的这个时间段经常看到学长学姐在pyq里的牢骚。对课程机制的不满。不得不说今年的好评如潮必然是源于助教们老师们的努力,凌晨五点的公告,人性化的延期,及时的暖心贴都是助教老师们辛勤的付出。
这门课无疑给我带来了很大的影响,完全担当的起第一节课PPT中“昆仑课程”的称号。 不得不说于我,这次OO课程体验极佳。最后再次感谢课程组成员所付出的努力。