OO第二单元总结

OO第二单元总结

 

一.第二单元综述

三次作业,总体来说在设计方面都遇到了一定困难,本地测评符合期望,但在评测机上的表现并不好。与第一单元不同,这三次作业都有自己的标准输入输出,而且多线程的设计会保持程序一直处于挂起状态。电梯处于动态,不断进行printf的debug方法也变得不实用。这单元的任务对我来说是个不小的挑战。具体的分析作业需求,第一次作业只有一部电梯且不限制载客量,第二次有多部电梯且限制载客量,第三次有多部多类别电梯,不同电梯可达楼层与载客量均有区别。除此之外还需要实现添加电梯的功能。三次作业我都只专注于实现程序基本功能,并没有考虑性能分。

二.代码思路分析

1.单电梯调度

第一次作业花费了我很多时间,因为第一次接触多线程编程实现代码功能有些困难。阅读指导书内容理解电梯调度规则后,我采用课上讲的生产者-消费者模式实现电梯的调度。首先电梯在无人的情况下会先响应最早发出指令搭的乘客来服务,电梯在负载时先响应电梯内部乘客的请求,并前往最快能够到达的楼层。在每到一层的时候电梯会将满足捎带条件的乘客搭载上电梯并重新计算路径。电梯的停止满足三个条件:输入结束,调度器中所有的需求都被响应,电梯为空。如果其中一个不满足,电梯将会运行或者等待。  

2.多电梯调度

本次作业增加多部电梯,并有载客量的限定。在第一次作业的基础上,在电梯线程与输入线程中间新建电梯调度线程(Elevator Service),同样采用生产者-消费者模式。

 

 由UML分析代码思路

  Elevator和ElevatorIncidentally两个类完成了电梯身份与运行状态的处理。

  person类中维护了乘客请求的队列。

  personrequest类处理中途转换楼层的请求。

  Elevator完成不同电梯总方面的调度。
  Main类很简短调用了service的package。

复杂度分析

电梯调度方法的复杂度最高,主要原因是处理请求中用了很多if和while的嵌套。

3.多类别电梯调度

 

 

 由UML分析代码思路

  Elevator类确定电梯运行状态

  ElevatorA/B/C三类电梯我都分别P做了单独的一类,用以表达不同电梯的不同功能。

  Elevatorservice完成电梯运行时的调度

  PresonRequest实现用户各种乘坐需求的处理

  Person包含用户的标识和基本动作

复杂度分析

 

 乘客选择电梯的方法中复杂度较高。判断方法比较笨拙。

 三.Bug分析

每次作业中我在本地评测都出现了线程不安全的问题,无法处理导致CPU超时。对于输入的不当处理,也导致过空指针错误。面对这些bug我显的手足无措,因为自己的设计问题也导致了评测时都没有通过。第三次作业的新增线程来添加电梯的方法我也没有在规定的时间实现。虽然在作业过程中请教了很多同学,但是很难直接解决自己的困难。还是需要在设计方面多下心思,不能一直被bug困扰。

四.心得体会

第二单元的作业相比于第一单元有很多新的地方。多线程的程序设计概念我第一次接触,吸收理解的并不是很好,但是课后基本实现了程序功能。但是电梯调度的三次作业递进性很好,基本没有进行重构,没有第一单元第三次作业那样的难度陡增。经过了几次作业的洗礼,我有效作业的次数很少,主要是我在设计过程中难点太多,总是在解决一些和设计本身无关的问题。这就导致程序设计效率低下同时又有很多bug,在本地测评花费很多时间。在算法设计方面,思路也比较笨拙没有构建一个高效的计算思想,这也是我主要需要提升的方面。

posted @ 2020-04-18 21:11  刘家琪  阅读(126)  评论(0编辑  收藏  举报