OO第二单元总结

一、设计策略

(1)第五次作业

  第二次作业程序中有三个线程,一个线程进行请求的读入并将其按顺序存入队列中,电梯线程一次从请求队列的头取出一个请求并执行,以及调度器线程,电梯将当前楼层、及主请求相关信息传递给调度器,调度器根据调度策略将请求队列中可以被捎带的请求传递给电梯,存入电梯内部的请求队列中,电梯每到达一层楼,调度器对请求进行一次更新,电梯遍历一次电梯内部请求列表,将到达或进入电梯的人员执行,判断主请求是否存在,若不存在则根据调度算法选取下一主请求。

(2)第六次作业

  第二次作业依旧有三个线程,但系统中有五个电梯,根据标准输入第一行的电梯数来运行相应数量的电梯,由调度器依据调度策略将能够被捎带的请求传递给相应的电梯,电梯对请求进行处理。

(3)第七次作业

  在第六次作业的基础上继承电梯类构建电梯A、B、C三个子类,设定电梯相应的属性,由调度器依据调度策略将能够被捎带的请求传递给相应的电梯,电梯对请求进行处理,若有电梯请求则注册相应类型和名字的电梯,加入电梯队列中,捎带策略与之前相同。

 

二、基于度量的程序结构分析

(1)第五次作业

 OO第二单元总结_第1张图片

  这次作业中共有七个类,分别为:

  Main:主线程

  InputHandler:将输入存进请求队列中

  Dispatcher:调度器,将可稍带的请求加入电梯的请求队列中

  Elevator:电梯线程

  RequestList:请求队列

  ElevatorRequestList:电梯内的请求队列

  Person:请求

(2)第六次作业

OO第二单元总结_第2张图片

  

  这次作业中共有七个类,分别为:

  Main:主线程

  InputHandler:将输入存进请求队列中

  Dispatcher:调度器,管理运行的电梯数量,将可稍带的请求加入电梯的请求队列中

  Elevator:电梯线程

  RequestList:请求队列

  ElevatorRequestList:电梯内的请求队列

  Person:请求

  这次作业中的类与第五次作业基本相同,但在调度器类中根据输入的电梯数量对进行工作的电梯进行管理。

(3)第七次作业

OO第二单元总结_第3张图片

  这次作业中共有七个类,分别为:

  Main:主线程

  InputHandler:将输入中的乘客请求存进乘客的请求队列中,将电梯请求存入电梯的请求队列中

  Dispatcher:调度器,管理电梯的数量和类型,将可稍带的请求加入电梯的请求队列中

  Elevator:电梯线程

  RequestList:请求队列

  ElevatorRequestList:电梯内的请求队列

  Person:请求

  这次作业中的类与第六次作业基本相同,但在调度器类中根据输入的电梯增加请求对进行电梯进行管理。

 

三、Bug分析

(1)第五次作业

  没有Bug发现。

(2)第六次作业

  在到达指定楼层送完队列中最后一个乘客后会再向运行方向前进一层,对电梯线程的wait与结束判定不合理导致的。

(3)第七次作业

  出现超时的问题,这是电梯的调度策略不太合理导致的。

 

四、发现别人Bug所采用的策略

  还是采用的手动输入,由于技术太落后在这过程中并未能发现别人的Bug,在研讨课其他同学的展示中学习到可以利用数据生成器进行自我评测或是发现他人的Bug,输入可通过文件输入而不须手动输入,未来有机会有能力的话或许可以尝试一下。

 

五、心得体会

  最最最最最重要的就是要保证线程安全,合理对线程进行上锁,利用wait()、notify()等对线程进行保护,以此来保证线程安全,对于上锁的问题我的理解还不够透彻,接下来还需要更多的学习与练习。

  关于设计原则,需要将各个类的功能分开,处理输入的类只处理输入,电梯类就只执行电梯的运行工作,这样设计分工明确,自己写的时候思路更加清晰,也有利于功能的扩展。

  此外,这个单元的作业在动手写代码之前需要经过更加深入的思考,不能着急上手,前期的构思,资料查询非常重要,只有做好这些后期写代码时才能更加顺利。多线程的调试是一个难点,还需要进一步学习。

这次作业中共有七个类,分别为:

  Main:主线程

  InputHandler:将输入存进请求队列中

  Dispatcher:调度器,将可稍带的请求加入电梯的请求队列中

  Elevator:电梯线程

  RequestList:请求队列

  ElevatorRequestList:电梯内的请求队列

  Person:请求

  这次作业中的类与第五次作业基本相同,但在调度器类中根据输入的电梯数量对进行工作的电梯进行管理。

你可能感兴趣的:(OO第二单元总结)