一、UML图
二、Design by Contract, Code Contract
契约式设计(Design by Contract ,DbC)是一种设计计算机软件的方法,是按照某种规定对一些数据等做出约定。如果超出约定,程序将不再运行。例如,要求输入的参数必须满足某种条件。站在java语言的角度上讲,所谓的契约式编程就是在满足一定条件的情况下,才有条件执行方法体,可以使用AOP实现Java契约式设计。在java的Junit测试中我们使用断言(assert)来观察我们程序结构。
三、实现Bus调度算法
Bus调度算法的思想是:将电梯当作公交车,从-1层一直到最高层,每一层都停,并且开门让乘客进出,然后关门继续向上走。直到最高层,再向下。
在实现过程中,我们使用四个线程运行四个电梯。在每个线程中,首先判断电梯是否在本层服务。若可以提供服务,则电梯开门,同时调用EleController类中的synchronized方法GetPsgIn(),将可以在本层进入该电梯的乘客接走,以此保证每个电梯访问等待中的乘客列表时,不会出现因为线程冲突引起的bug。
public void busDispatcher(){
随机生成乘客
调度电梯所用的线程(共4个)
for (int i = 0; i < ELE_COUNT; i++)
{
new Thread(()->{
while (true){
获取此刻状态和楼层
判断是否在本层服务
检测有无上下电梯
电梯运行
}
}
}).start();
}
}
四、制作主界面UI

上图为我们小组制作的电梯调度程序主界面,左侧可以随机生成乘客,也可以手动添加乘客。我们提供了“Bus”“SSTF”“LOOK”三个按钮,以供用户自主选择合适的调度算法。右侧为电梯运行状况的模拟,直观地显示了电梯当前所在的楼层、载人、载重以及乘客的信息。

“设置电梯参数”按钮连接一个新的界面,可以根据用户需要调整电梯的服务楼层、最大载人、最大载重等参数。输入电梯编号并填入新的载重、人数,勾选服务楼层,便可以更新该电梯的参数。
本文探讨了如何使用UML图描述电梯调度系统,介绍了Design by Contract原则在代码中的实践,详细阐述了Bus调度算法的实现过程,并展示了主界面UI的设计。通过实例演示了从理论到实践的完整流程。
1563





