◆附加题1
改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享。
首先,不得不说这个程序的框架设计分非常规范也很实用,但我认为其中还存在一些小瑕疵。
反映现实改进:
1.由于电梯的承重不同,所以电梯的速度会有差别。
2.电梯是不能数出有多少人的,所以我认为电梯的人数限制这一项需要删除。
更能让学生练习算法改进:
1.一个好的interface设计需要有详细的注释,而现在这个interface注释非常的少, 使用和理解起来需要花费大量的时间,建议给一些关键代码加上必要的注释,以方便学习和使用。
2.程序输出部分,希望能够再加上一段输出,用来表示每一位乘客是否都正确的到达了目的地。 这样能够让学生直观的知道算法的正确与否,以便于学生的调试。
以上就是我对interface 设计的一些建议,若有不对之处,望老师指正。
◆附加题2
目前的这个测试程序只有命令行界面, 请给它设计UI界面, 显示乘客/电梯的运动, 并实现之。
下图是我们设计的UI界面,模拟实际电梯的运行状态,直观的表示电梯的运行。(请问老师这个需要签入TFS上面吗?)
◆附加题3
阅读有关 MVC 和 MVVM 设计模式的文章。
关于MVC MVVM的定义就不多说了,百度百科上有。
我主要说一说这两种设计模式与我们这一次作业的关系和联系。
MVC:模型(model)-视图(view)-控制器(controller),若将电梯比作这一次的项目的话,我认为我们能用这一种模式来解决这一个项目,首先我们这一次作业代码部分主要是在写控制器,而第二个附加题是视图部分,用户可以根据这个UI界面直观的了解电梯的运行过程,而我们还少了模型这一部分,因为我们这一次作业对很多条件都是限定死的,例如第四个附加题,我们就不能很好的解决。
MVVM:Model-View-View-Model,主要作用是分离视图和模型,一个视图的改变的时候模型可以不变,同样的,一个模式改变的时候视图也可以不变,所以可以使用MVVM来开发用户控件。在这一次的项目中因为针对不同的大楼,我们对电梯有不同的限定,针对不同的电梯,我们对电梯也有不同的限定,所以使用MVVM模式来开发电梯的用户控件,不需要涉及数据的持久化,使得用户控件可以更具有普遍性,我们可以使用MVVM模式来处理第二个附加题和第四个附加题。
◆附加题4
我们现在的题目是假设所有电梯到达所有的楼层。 在现实生活中, 多部电梯到达的楼层都不一样。如果是这样 (例如3号电梯能到达10 – 20 层, 4 号电梯能到达5-15 层),整个程序框架和你的电梯调度模块要做什么改变?
(1)程序框架部分:
首先需要修改Loader目录下elevators.xml,如下图:
将每部电梯的highestfloor的值修改为指定的楼层,并设置一个lowestfloor参数,来表示所能到达的最低楼层。
对应程序修改部分如图:
整个程序框架只有Commons、Elevator处需要做以上修改。
(2)电梯调度模块部分:
需要添加一个函数public bool Response_Logic(),
1.在电梯外部请求时,每次有一个新的请求时就调用这个函数,由返回的布尔值来判断当前处理编号电梯能否响应该请求。
2.在电梯内部请求时,每次有一个新的请求就调用这个函数,由返回的布尔值来判断当前处理编号电梯能否响应该请求,若不能响应,则电梯不接受该请求,电梯回到之前状态,由其他电梯响应该请求。
具体函数如图:
通过上述程序部分的改进,就能够实现不同的电梯所能到达不同楼层的要求。