OO第二单元博客作业

OO第二单元博客作业

一、程序结构与设计策略分析

类图:
第一次作业:略(找不到了)
第二次作业:

  • Main.java:仅用于启动调度器线程输入进程,不涉及其他功能。
  • Elevator.java:从实际的角度出发,调度器与电梯分离,电梯仅有一些基本的行为与属性,如开关门时间、电梯内乘客、开关门、上下行、进出乘客等。
  • Person.java:用于表示电梯内的乘客,实际就是一个二元组,仅有idto两个属性,及其get()方法。
  • ElevatorInfo.java:接口,以常量的形式存储电梯的规格信息,如开关门时间、上下行时间、最大载客量等。
  • RequestQueue.java:用于存储PersonRequest,通过保证了synchronized保证了线程安全。
  • InputThread.java输入线程,用于输入。
  • SubDispatchThread.java调度线程,采用一电梯一调度器的设计,通过wait()notify()实现从RequestQueue取走PersonRequest的操作。

第三次作业:

  • Main.java:仅用于启动调度器线程输入进程,不涉及其他功能。
  • Elevator.java:从实际的角度出发,调度器与电梯分离,电梯仅有一些基本的行为与属性,如开关门时间、电梯内乘客、开关门、上下行、进出乘客等。
  • Floors.java:由于可运行楼层不连续,因此每一层使用flooravailable来表示该层的楼层号以及是否可停,并封装成了Floors类。
  • Person.java:用于表示电梯内的乘客,实际就是一个二元组,仅有idto两个属性,及其get()方法。
  • ElevatorInfo.java:接口,以常量的形式存储电梯的通用规格信息。
  • InfoA/B/C.java:接口,以常量的形式存储A,B,C三类电梯的非通用规格信息。
  • RequestQueue.java:用于存储PersonRequest,通过保证了synchronized保证了线程安全。
  • InputThread.java输入线程,用于输入。
  • SubDispatchThread.java调度线程,采用一电梯一调度器的设计,通过wait()notify()实现从RequestQueue取走PersonRequest的操作。

二、可扩展性

  • 第一次到第二次彻底重构了,感觉在写两个作业,8提了。
  • 由于第二次作业为电梯预留出了一些额外的属性,而且采用的是一台电梯对应一个调度器的设计,因此从第二次到第三次并不需要重构。只需要针对多个不同的电梯修改一下调度策略即可(说得轻巧)

三、自己程序的bug

有的解决了,有的解决不了了

  • 第二次作业中,在捎带的策略上遇到了一些问题,陷入了没有最优解的困惑,还好后来用普通的捎带就能过
  • 第三次作业中,90%的bug出现在对于需要换乘的请求的处理,比如,拆分的后半段请求假如队列的时机不对、拆分之后乘客id出现重复等等等等,写代码5分钟,dubug两小时

四、他人程序的bug

  • 没有采用自动化测试,知识根据自己的理解测试了几个容易出错的点,但大家都好强T_T
原文地址:https://www.cnblogs.com/jero123/p/12728281.html