• 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
  • 相关阅读:
    熟悉常用的HBase操作
    爬虫大作业
    熟悉常用的HDFS操作
    数据结构化与保存
    获取全部校园新闻
    爬取校园新闻首页的新闻的详情,使用正则表达式,函数抽离+网络爬虫基础练习
    中文词频统计
    英语词频统计
    AXIOS中文文档
    overload方法重载
  • 原文地址:https://www.cnblogs.com/jero123/p/12728281.html
Copyright © 2020-2023  润新知