1.作业架构设计
第四单元的前两次作业是对UML模型文件进行解析,主要关注类图、顺序图和状态图模型层次的语义观察,UML模型间关系,模型图表达的内容及关系,模型图之间的关系和一致性检查。第三次作业针对UML有效性检查,根据所给规则检查模型有效性。
1.1第一次作业
主要实现了对UML类图的解析功能。我创建了Information类用来方便保存和查询类UML_CLASS或接口UML_INTERFACE的方法和属性,用一个HashMap来保存id->Information的对应关系从而方便查询。在类图解析类的构造方法中,遍历传入的UMLelement,根据其数据类型来新建Information类的对象或者设置Information对象的参数。接下来重写的查询方法也较为简单,只需要按照已经存好的HashMap找到其Information,即可非常简单的完成功能。
1.2第二次作业
新增实现了UML顺序图和状态图的解析功能。仿照第一次的架构,新增了SequenceInfo和MachineInfo两个类分别对应储存顺序图的信息和状态图的信息。与UML类图中的储存和查询方法非常相似,不再赘述。
1.3第三次作业
新增实现了UMLPreCheck的功能。第三次新增的部分与前两次独立,用HashMap存起各个元素并在构造方法中直接完成其中几个比较简单的precheck。重写的UMLRule00xCheck中利用HashMap来完成对UML模型的正确性检查。
1.4程序bug
此单元作业的中测时各有一些小错误,但是均在中测时直接解决。三次强测只是前两次各有一个数据超时,总体来说并没有出现什么太大问题。
2.架构设计及OO方法理解的演进
演进是循序渐进的。最开始时丝毫“不计代价”的写代码,导致第一单元的时候三周的作业逐周重构,简直噩梦。第二单元的时候开始思考如何架构的问题,思考如何才能让代码具有更好的可扩展性,从而减少重构,也直接地减少了代码的任务量。在思考方式上面,我学会了如何把事物看做对象,逐渐掌握了抽象的思路,有了这些思想,才更能对复杂的问题简化,才能在代码量成倍增长的情况下保持思路的清晰,在Debug的时候也有更明确的方向。而不像大一的时候或者第一单元最开始时一样,写代码平铺直叙一个文件,出了问题只能随缘调试。在第三单元第四单元,我更宏观地掌握了构造与设计的重要性,学会了在书写时留意SOLID原则,更加注重时间复杂度和空间复杂度(尤其是前者)的问题,使得自己的代码质量更上一层楼。
3.测试理解与实践的演进
主要的调试方法还是因情况而异。比如第一单元的作业,情况分支非常多,这就非常适合用断点调试来追踪代码的执行进入到哪个分支,同时观察变量的取值。又如第二单元的作业,多线程的情况下,运行结果具有不确定性,不能用简单的断点调试来进行同步代码块的调试,这一整个单元都采用了print大法进行调试和追踪,也采用了一些静态调试(肉眼追踪)的方法慢慢找错误;方法虽然简陋但是还是非常有效的。第三单元的时候学习了JUnit单元测试,这对每个模块分立,架构条例清晰明确的代码非常适合。第四单元的时候,我已能结合这些方法,根据情况所需来进行调试了,debug的效率相比刚开学时提高了很多。
4.课程收获
经历了一学期的OO课程历练,真的是感受颇深。首先是收获了一段并不轻松的回忆吧。这个压力来源于每一个月的三周OO作业如期而至,有一种高三下学期每周模拟考试的感觉,这也让我每一周想划水的时候不能划水,每周按部就班地按照ddl及时提交作业。程序嘛,和普通作业的最大区别就是,只有AC才算提交了。哈哈我能保证今天晚上就能肝完这周的OO,可是我没法保证我明天下午就能直接过中测啊,我也不能保证对着Middle5空荡荡的输入输出就知道自己错在哪里了呀。这些不确定性,注定了OO这门课程只能是一门硬课,注定了他给我带来的压力。
作为一门硬课,不能光有压力而不产生任何效益,否则不能算是一门好课。幸运的是,OO这门“昆仑课程”带给我了很多很多的收获。我的编程能力长进是日新月异的,同时学会了很多工具,对java语言的基本写法轻车熟路。在编程思想上,对架构设计以及测试的理解如上所述,都有了质的飞跃。经过了这一学期OO课程的历练,我不再是只能驾驭百行级别程序的菜鸡。另外我也收获了许多自信,让我在面对其他学校的同行时更加有底气。
5.课程建议
1.感觉第一周可以让同学们缓冲一下。我记得有一周OO课总结第一单元的时候看第一单元三次作业的完成情况是逐渐变好的,这是好现象,但是也说明第一周大家完成的不够好嘛。(我第一周的时候就非常痛苦,但是后面就挺好了...)一周缓冲并不多,但是可以增加同学的信心,尤其是对后面的同学来说,第一次如果就跪了,对后面的作业积极性和信心也有很大的打击。(虽然事实上证明第一次作业其实是心理压力最大的...)
2.3.OO冲冲冲!没有什么别的建议啦...越办越好!
6.线上学习OO体会
不知道在学校线下学习OO是怎样的体会,反正线上学习感觉还好啊。能收获到的还是很多的,听课时间比较自由,作业由于有ddl的时间限制,其实和在学校的自觉性应该也差不多。总体来说一学期下来还是比较满意的~