一、本单元三次作业的架构设计
第四单元的三次作业完全呈现递进式的架构,第一次作业针对类实现查询方法,再后来的作业则增加了状态图与顺序图的查询,整体架构设计参照第二次作业。根据官方包提供的UMLClass和
UMLInteraction进行架构,在此基础上增加数据存储类型来完成操作。
第二次作业UML图:
二、四个单元中架构设计及OO方法理解的演进
第一单元
自己对第一单元中多项式求导问题三次作业的设计历经了一次重构,从将所有方法写在主类中到运用接口与继承来将架构层次化,将问题对象化。代码架构实际上按照多项式的架构进行划分,同时多种因子均继承一个接口来实现求导。这一单元也是自己进步最大的一个单元,在架构设计上自己完成了从面对过程到面对对象的蜕变,同时在重构的过程中也加深了自己对OO方法的理解与运用。
第二单元
在第二单元的多线程架构设计上自己用的是经典的生产者-消费者模型,在电梯问题中电梯自身就是消费者,而等待队列设定为生产者,电梯调度器则是二者的公共仓库。在调度算法上完全采用的是指导书中做给出的ALS规则。这一单元中架构设计上没给自己带来很大的挑战,但是各种多线程bug以及调试的过程让自己收获颇丰。事实上在解决了不少多线程bug后自己对多线程的理解才有了显著的提高。
第三单元
第三单元是实现JML,作业中也不存在架构的设计问题,重点还是考察对JML的理解以及图算法的掌握程度。经过课一个单元的学习对JML的理解得到加深,而且自己还重拾了一遍图算法,也算收获不小。
第四单元
第四单元考察对UML的理解,在架构设计上根据三次作业的要求以此增加对类图、顺序图以及状态图的查询,重点还是考察对现有接口代码的理解,在仔细读懂了课程组所给出的接口代码后就能实现接口并完成查询方法的构建。
三、四个单元中测试理解与实践的演进
第一单元
第一单元自己的测试手段还停留在手动构造测试样例的阶段,主要是在写代码中自己碰到的问题以及一些边界样例的构建。
第二单元
第二单元自己的测试方法还是侧重可能造成死锁样例的构建,但是手动构建测试样例的效率实在不高给自己的测试带来了很大的问题。
第三单元
第三单元JML的测试完全采用Junit进行单元测试,相对于执之前两个单元测试轻松了不少,但是自己没考虑测试样例较大的情况,因此忽略了程序的效率问题。
第四单元
这一单元的测试依旧很费心,自己手动构建UML图再对所有方法进行测试,测试的过程中自己也遗漏了不少东西。
四、课程收获
本门课程带给自己最大的收获就是面对对象入门,经过四个单元的历练才发现面对对象的世界原来是这么美好而不单调。同时自己也学会了将问题抽象为类,再通过接口来实现层次化的设计。虽然自己的代码依旧存在这不少毛病,但是假设自己用面对过程的思想来完成着四个单元的内容,不对,应该说自己已经想象不出来了,在面对较大且比较复杂的问题上面对对象本身具有明显的优势。在每一次作业的架构中自己也在一步一步朝着面对对象的世界进行探索。
此外自己收获最大的地方还在于测试阶段,事实上测试越全面说明自己的设计就越可能接近完美,虽然自己的代码离完美还差很大一截,但是在测试的过程中找出自己的bug还是很兴奋的一种体验,也让自己更加看清自己代码中在架构上以及实现细节上的各种问题。
五、给课程的具体改进建议
理论课
就对于我个人而言我觉得老师上课讲得是很用心的,但是课件的设计就有点“抽象”,有时候一节课下来感觉知识学到了一个概念性的东西,因此还是希望可以加入更多的实例。
实验课
实验课整体而言难度适中,但中间有些实验课真就是在考察课后学习的程度,对于没有认真仔细学习的同学就显得负担过大。但是自己还是希望实验课程在结束之后有机会放在课上讲解或者研讨一下。
研讨课
自己更加主张研讨课上重点作业中碰到的问题,也希望在单元结束之后有同学优秀代码展示,有时候在看了别人的代码之后才更能意识到差距所在。
作业
作业整体而言所给时间也算充裕,前提是课下花费大量的时间,其实在架构时以及测试阶段课程讨论区以及和同学的交流是十分有用的,能给自己避坑不少,而且在后面的几次作业中课程组所给出的接口包节省了很大的功夫,整体而言还是很满意的。唯一要吐槽的还是互测阶段阅读别人的代码实在是费时费力,所以一般都是采取盲测的手段,因此感觉互测还是很需要改进的。
六、线上学习oo课程的体会