结对编程 附加做业 java
毛宇 11061171算法
程志 10061188编程
#1 [附加题] 改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享。设计模式
其实在学习这个框架的过程当中,咱们有不少不少的感觉。安全
整体评价这个框架,感受写得很是的规范,特别是接口的设计让人以为耳目一新,可是仍是存在着一些小问题,好比:框架
3.接口中有些常量名字取得让人觉的很难理解,好比” DirectionReqSource”,为何不能用start_floor来替代Source呢,在这样一个没有文档的框架中,变量起名绝对是很是重要,由于它直接决定了学生理解其的难度。好比Tick,为何不能用Second来代替,等等等等。总之,我但愿这些名字最好直观口语化。函数
#2 [附加题] 目前的这个测试程序只有命令行界面, 请给它设计UI界面, 显示乘客/电梯的运动, 并实现之。布局
实现一个UI界面的方法其实很简单,咱们的做业中在solution下新建了一个WinForm工程,而后设置main函数开始运行的时候,winform工程也开始启动。这里其实借助了游戏开发的思想(相似的游戏开发思想在Cocos2d-x引擎以及微软XNA框架下比比皆是),也就是“轮询机制”,在每一帧的时候刷新当前电梯的位置的状况,从而达到动画的效果。学习
具体的代码已经迁入到TFS上面。(由于设计到部分框架下代码的改动(主要是几处成员变量改成了public形))测试
此外,为了达到更好的用户体验,咱们还加入了测试文件的选择对话框:
在实现的过程当中遇到了一些问题,好比C#不接受跨线程访问UI,这个问题开始困扰了咱们好久,后面在百度知道求助专家,终于恍然大悟,经过改变安全等级来消除了这个问题,这里感谢百度网友 “矮矮的小孩”和”黑人_九天”的相助。
#3 [附加题] 阅读有关 MVC 和 MVVM 设计模式的文章。
首先贴出来一个MVC的定义
“MVC,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法,这个方法的假设前提是若是业务逻辑被汇集到一个部件里面,并且界面和用户围绕数据的交互能被改进和个性化定制而不须要从新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。”
其实我我的的理解是,咱们MVC是一种设计的结构,使得构成软件中三个比较重要的要素可以相互独立。举个例子,Android中的Activity(能够理解为界面)的开发使用了Xml,将控件(模型)添加到界面中 ,而且调整大小布局(视图)。而控制器,也就是逻辑代码的则采用了java,这样有一个好处,就是使之相互独立了起来。相比之下,这样的开发结构使得耦合性,重用性,可维护性都大大提升。
在这个项目中,基于WinForm工程的UI设计就是一个很好的例子,控件(好比Label等)就是模型,布局就是视图,而后逻辑代码就是控制器。
可是我我的以为像电梯调度框架这样的比较小的项目,没有必要去采用MVC模式,由于过于在中小型的应用中强调这种模式确定会浪费大量的时间。
#4 [附加题] 咱们如今的题目是假设全部电梯到达全部的楼层。 在现实生活中, 多部电梯到达的楼层都不同。若是是这样 (例如3号电梯能到达10 – 20 层, 4 号电梯能到达5-15 层),整个程序框架和你的电梯调度模块要作什么改变?
若是对于电梯的楼层作出了限定,那么改变的方法其实也很是简单。
主要的改变我我的认为应该是在电梯模块中,就是电梯对请求的处理中要增长出一个断定,好比某乘客要去4层,电梯不能去4层,就忽略这个乘客。
应该其余地方是不须要改变的(这个问题是想侧面证明框架中给出的设计优越性吗?)