zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    游戏程序设计DirectX 9
    面试题1
    [python爬虫] Selenium定向爬取PubMed生物医学摘要信息
    Python简单实现基于VSM的余弦相似度计算
    [python爬虫] Selenium常见元素定位方法和操作的学习介绍
    [python爬虫] 爬取图片无法打开或已损坏的简单探讨
    [python] 安装numpy+scipy+matlotlib+scikitlearn及问题解决
    [python] 使用Jieba工具中文分词及文本聚类概念
    javascript在firefox中对Dom的处理的一个问题
    XML和DOM节点的NodeType
  • 原文地址:https://www.cnblogs.com/jero123/p/12728281.html
Copyright © 2011-2022 走看看