文章目录
前言
本次项目中,我与崔文光同学选择使用Java编程语言来实现电梯调度问题的模拟,并使用JavaFX来制作应用的图形化界面。
一、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
·Estimate | 估计任务时间 | 20d | 20d |
Development | 开发 | ||
·Design Spec | 生成设计文档 | 120 | 120 |
·Design Review | 设计复审 | 60 | 80 |
·Coding Standard | 代码规范 | 30 | 30 |
·Design | 具体设计 | 60 | 60 |
·Coding | 具体编码 | 1000 | 1200 |
·Code Review | 代码复审 | 30 | 60 |
·Test | 代码测试 | 60 | 60 |
Reporting | 报告 | ||
·Test Report | 测试报告 | 60 | 90 |
·Size Measurement | 计算工作量 | 30 | 30 |
·Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 30 |
· | 合计 |
二、利用Information Hiding, Interface Design, Loose Coupling的知识设计接口
“Information Hiding”为信息隐藏,“Interface Design”为接口设计,“Loose Coupling”为低耦合。本项目采用面向对象的设计思路,将电梯、乘客等实体抽象成类进行封装,并留出接口以供开发者调用。同时保持项目的模块与模块之间互相独立,减少模块之间的联系。
三、模块接口的设计与实现
3.1 Passenger类
Passenger类用于抽象乘客,包含乘客重量、起始楼层、终点楼层等属性。
3.2 Elevator类
Elevator类用于抽象电梯,包含电梯最大载重、电梯最大人数、电梯服务楼层、开关门时间、上下层运行时间等属性,同时定义了使乘客进入GetPeopleIn()、使乘客离开GetPeopleOut()、上行goUp()、下行goDown()等函数。
3.3 EleController类
EleController类为电梯组调度器,存放了问题中的四个电梯对象,以及想要乘坐电梯的乘客请求列表,同时定义了添加坐电梯请求AddRequest()、查找某电梯距离最近的乘客GetNearestPsg()等函数,以便后续算法的调用。
3.4 MainWindowController类
MainWindowController类为主界面控制器。由于后续将要实现的三种算法均要在主界面提供服务,故此类中包含了分别实现三种调度算法的函数。
四、代码规范与设计规范
在项目开始前,我与崔文光同学约定了程序的代码规范与设计规范,如成员变量与成员函数的命名规则、ui界面的控件父子关系规则、多线程中哪些类或变量必须互斥访问等,以便于提高后续开发的效率。