oo第四次博客-UML暨学期总结
一. 本单元两次作业架构设计
这两次作业实际上难度不大,不存在算法上的难题,大部分时间都是用在处理UML图中各个元素的关系上。
第一次UML主要处理UML类图。有UMLclass,UMLinterface两个顶级元素,其中UMLclass又下属UMLoperation等组成元素。此外的UMLgeneralization,UMLassociation等则是顶级元素间的关系。
完成本次作业,我觉得主要在于理清上述元素间的关系。
第一次作业实现后的关系图如下:
而第二次作业则是在第一次作业的基础上加入了顺序图等,只需理清各种图中所含元素与关系,自然就能完成需求。
第二次图如下:
二. 四个单元中架构设计及OO方法理解的演进
oo是将事件分解为各个对象间的交互,事件的推进是经由外界条件触发(在我们的作业中表现为各个需求的输入),每个对象的具体行为以及对象间的耦合行为。
我认为,对于面型对象编程,具体到对象的底层行为以及对象间的交互行为,是封装好的面向过程的函数,面向对象与面向对象的区别应该在于将行为与行为的主体、客体相分离而非混在一起。
在第一单元的作业中,我们学习的是将表达式求导这一事件的表达式,分解为项、因子等更加小的对象进行耦合处理。在前两次作业中,我们主要是将每个对象分别处理再相加即可,而在第三次作业,由于需要使用递归下降,我们开始注意对象间的耦合关系。
在第二单元的作业中,我们学习的是多线程环境下的面向对象。在多线程环境下,每个线程都是由对象耦合得到的,而不同线程间往往还有共有的对象,在这里我们需要保证操作的原子性。在该次作业中,我使用了生产消费者模型,将顾客队列作为生产者,多部电梯每一部作为一个消费者来完成,但是对于电梯对顾客队列的询问没能处理好。
在第三单元的作业中,我们主要学习了JML,它可以帮助我们约束代码。在这一单元的作业中,我们除了JML外也开始在oo中加入一些算法。我将算法模块作为了一个单独的对象进行处理。
在第四单元的作业中,我们完成了UML的解释器,因为UML本身就是面向对象的产物,这一单元相对简单,只需要理清各元素间关系即可。这一次是我觉得我的对象分割处理得最好的一次。
三. 四个单元中测试理解与实践的演进
这方面我做的不太好,我在建模时考虑的比较细,一般第一次提交后只会有一些小bug,处理一些细节问题后边不太会有问题,所以对于数据测试这方面没有下太多功夫,只是做了基本的数据测试。对于如何测试,学会了一些基于控制台的测试方法。
四. 课程收获
学会了Java,学会了基本的面向对象,学会了一些测试时的小技巧。
五. 改进建议
1. 课程时间的协调。oo的理论课在后期多次拖堂,我认为应该根据课堂时间对内容进行一些详略调整;对于oo的作业,其时间和os有相当的重合,作为大二下六系的两门大课,不应该将时间进行一下协调吗?同时在大多数时候,oo的上机都是上午讲,下午测试,中间就隔了两小时,这种安排极不合理,上机时一脸懵逼,根本起不到什么效果(这是我和我周围宿舍的同学的反应,代表不了大多数人)。
2. oo作业相关问题。首先需要安排好作业的时间,本学期考期写大作业简直要人命,我记得大约是16号左右才发布能够真正知道同学们的指导书,里面仍有相当多的问题,比如样例中例子与给出的答案不匹配误导了一部分同学,等等。此外希望能够减少改指导书的次数,在学期初期多次修改指导书。
3. 互测房间人数过多,虽然是想增加我们的代码阅读量,但是也要考虑主观能动性,每周看6份代码,还要求我们找出bug,难道我们其他课都不上了吗?这导致最后互测积极度明显下降。