OO第二单元总结
一、设计策略
(1)第五次作业
第一次作业是个傻瓜电梯,采用的调度策略非常简单。程序中有两个线程,一个线程进行请求的读入并将其按顺序存入队列中,电梯线程一次从请求队列的头取出一个请求并执行。
(2)第六次作业
第二次作业依旧是有一个线程进行请求的读入并将其存入请求队列中,同时增加了调度器线程,电梯将当前楼层、及主请求相关信息传递给调度器,调度器根据调度策略将请求队列中可以被捎带的请求传递给电梯,存入电梯内部的请求队列中,电梯每到达一层楼,调度器对请求进行一次更新,电梯遍历一次电梯内部请求列表,将到达或进入电梯的人员执行,判断主请求是否存在,若不存在则根据调度算法选取下一主请求。
(3)第七次作业
原构思是在第六次作业的基础上继承电梯类构建电梯A、B、C三个子类,由调度器依据调度策略将能够被捎带的请求传递给相应的电梯,电梯对请求进行处理,但后来由于能力与时间问题最终未能完整实现这次的要求。
二、基于度量的程序结构分析
(1)第五次作业


这次作业中共有四个类,分别为主类Main,输入处理Queue,电梯类Elevator和共享类Tray。因采用傻瓜调度无捎带,电梯只需从请求队列里按顺序取出请求并执行,较为简单。
(2)第六次作业

这次作业中有五个类,相比第五次作业增加了一个调度器,对请求队列中的请求进行判断,将符合捎带规则的请求传递给电梯,加入电梯内部的队列中,再由电梯对其内部的请求进行执行。
三、Bug分析
(1)第五次作业
没有Bug发现。
(2)第六次作业
在到达指定楼层送完队列中最后一个乘客后会再向运行方向前进一层,对电梯线程的wait与结束判定不合理导致的。
四、发现别人Bug所采用的策略
还是采用的手动输入,由于技术太落后在这过程中并未能发现别人的Bug,在研讨课其他同学的展示中学习到可以利用数据生成器进行自我评测或是发现他人的Bug,输入可通过文件输入而不须手动输入,未来有机会有能力的话或许可以尝试一下。
五、心得体会
最最最最最重要的就是要保证线程安全,合理对线程进行上锁,利用wait()、notify()等对线程进行保护,以此来保证线程安全,对于上锁的问题我的理解还不够透彻,接下来还需要更多的学习与练习。
关于设计原则,需要将各个类的功能分开,处理输入的类只处理输入,电梯类就只执行电梯的运行工作,这样设计分工明确,自己写的时候思路更加清晰,也有利于功能的扩展。
此外,这个单元的作业在动手写代码之前需要经过更加深入的思考,不能着急上手,前期的构思,资料查询非常重要,只有做好这些后期写代码时才能更加顺利。多线程的调试是一个难点,还需要进一步学习。

浙公网安备 33010602011771号