OO第二单元的总结
三周复三周,一轮又一轮,我似乎已经将OO是为我的生活必须品了。在与同学吐槽者身负-3楼与20楼重任的A电梯君,以及我们都是上一层下两层不用电梯的五号青年的等等欢声笑语中结束了第二轮的OO作业。当然这次也是收获颇丰,我通过电梯了解了线程的工作原理,认识到了线程安全的重要性,下面我将对自己 的三次作业进行一下总结。
一、基于度量的程序结构分析
作业一
(1)总结
第一次电梯还是比较简单的,所以我采用生产者消费者模式就很容易的解决了。
(2)耦合度
可以看出电梯线程还是承担了太多的事情,不易维护。
第二次
(1)结构
第二次作业我依然采用两个线程的方法,输入进来以后便在调度器里维护两个有序队列,分别是上楼队列和下楼对列,当电梯为空时,就选取一个request当做主请求,之后每一层都要判断是否可以进行捎带,当主请求完成以后如果电梯里还有其他乘客,就要更新主请求,如此循环。
(2)耦合度
可以看出第一次的问题第二次依然存在。
第三次
(1)结构
第三次我在电梯方面没有太大改动,知识增加了人数的限制,我是从乘客的属性来下手,我采用了如下的一个四元组
这个四元组可以记录下这个乘客现在可以上那部电梯,是否需要下电梯换乘,换乘的话要去几楼换乘,采用这种方法可以轻松的解决换乘问题而不用修改电梯属性。
(2)耦合度
由于这次在调度器中做了大量操作,就使得controller线程十分臃肿,难以验证其全面性。
二、bug分析
此次作业的发现bug的难度与策略都与之前的作业不是一个级别的。
其实,这次作业只要肯花时间去对自己的程序进行大量测试集的覆盖测试就能找出大部分的bug。
这次的bug大致分为两类,就是线程问题,和乘客边界问题。线程问题只要没有暴力轮询就不会产生可复现的问题,而乘客边界问题只要测试集做的充分覆盖就可以保证没有问题。
而寻找bug时也是采用数据集的大规模测试法。
三、心得体会
电梯问题可以说是我对线程的初了解,使用线程可以大大增加程序的执行效率。但是毕竟我是第一次接触线程,很多安全类的事情都没有很好的理解,但是经过三周的训练,我已经有了基本的理解,当然这只是起步,再接下来的学习中肯定也少不了线程的身影,我还需要继续加强自己的面向对象功底。