[附加题改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享。

目前的设计有什么缺点, 你会如何改进它?

1.之前判断电梯是否闲置的函数不太好理解,重新修改了,如下所示:

        //是否停顿状态(停止的以及开门间隔>=0)public bool IsIdle{get{return CurrentStatus.CurrentDirection == Direction.No&& CurrentStatus.DoorCloseOpenTicks < 0;}}

2.原来的程序将每一个电梯的target都初始化为0,感觉并不合理。因为最开始电梯的状态应该是没有目标楼层的,而且在我们的算法中target如果一开始为0,会导致重复开门的问题。所以我们把target初始化为-1,代表电梯那时候并没有目标楼层。

3.IElevator接口中定义的函数public bool ReqStopAt(int targetFloor) ,先看函数名很容易让人联想到这个函数的作用是是调度电梯前往目标楼层,再看它的返回值是布尔类型,也就自然想到返回值标志着是否成功到达目标楼层。可是看具体的函数时,发现这个函数其实主要作用是将targetFloor这个参数的值赋给电梯的target,修改当前方向,并未把target如何具体发生改变的过程展现出来,而且返回值标志的是是否接受调度请求。所以感觉这个函数的问题要么是名字起得不好,要么是实现过程和名称不符。

其实这个函数的主要作用就是更新电梯状态(包括当前运行方向以及当前的目标楼层),所以我们觉得这部分代码完全可以放到StatusUpdateForEveryTick(int ticks)这个函数里,感觉这样更方便使用。

[附加题] 目前的这个测试程序只有命令行界面, 请给它设计UI界面, 显示乘客/电梯的运动, 并实现之。

  运行时的窗体用录屏工具做成了视频,然后转成了gif,就是有点小(免费软件理解一下)……

  主要的界面设计参照了上一级某Pair的设计,但是鉴于时间关系我们只展示了电梯的运行,没有展示出乘客的状态。

  

  不过做到这一点已经比较纠结了,因为窗体是在主线程创建的,而TickGoes中如果想对窗体的控件进行修改的话是不允许的。参考的Pair用的方法我们试着没有成功……最后用了委托这个东西,但是比较遗憾的是不能不能直接重复开始,要关掉重来才可以。

  限于时间关系关系暂时只能这样了。这一版没有上传TFS,这个没有关系吧?

  需要的话可以在博客贴出代码。 

[附加题]  阅读有关 MVC 和  MVVM 设计模式的文章。

  3.1 MVC(Model View Controller)

  即模型(model)-视图(view)-控制器(controller)。
  MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新,从例子可以看出MVC就是Observer设计模式的一个特例。

优点:
  1) 低耦合性
  2) 高重用性和可适用性
  3) 较低的生命周期成本
4) 快速的部署
  5) 可维护性
  6) 有利于软件工程化管理
  缺点:
  MVC的缺点是由于它没有明确的定义,所以完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。一旦构件经过了测试,就可以毫无顾忌的重用它们了。
  根据开发者经验,由于开发者将一个应用程序分成了三个部件,所以使用MVC同时也意味着将要管理比以前更多的文件。
  MVC并不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
  MVC设计模式是一个很好创建软件的途径,它所提倡的一些原则,像内容和显示互相分离可能比较好理解。但是如果你要隔离模型、视图和控制器的构件,你 可能需要重新思考你的应用程序,尤其是应用程序的构架方面。如果你肯接受MVC,并且有能力应付它所带来的额外的工作和复杂性,MVC将会使你的软件在健壮性,代码重用和结构方面上一个新的台阶。
3.2 MVVM
MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点:
  1) 低耦合:视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
  2) 可重用性:你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
  3) 独立开发:开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xaml代码。
  4) 可测试:界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。

转载于:https://www.cnblogs.com/encoin/p/4033532.html

PairProject 电梯调度 【附加题】相关推荐

  1. 电梯调度 matlab,数学建模电梯调度问题.pdf

    WORD 整理版 电 梯 调 度 问 题 专业学习参考资料 WORD 整理版 电梯调度问题 摘要 : 本题为一个电梯调度的优化问题, 在一栋特定的写字楼内, 利用现有的电梯 资源,如何使用电梯能提高它 ...

  2. 面向对象的程序设计-电梯调度系统的设计、优化与测试

    面向对象的程序设计(2019)第二单元总结 I  对问题的初体验 在开始OO之旅前,对OO电梯早有耳闻.这一次终于轮到我自己实现OO电梯了.首先从顶层需求出发对电梯系统进行分析,对象包括电梯.任务和乘 ...

  3. java面向对象模拟电梯_面向对象的程序设计-电梯调度系统的设计、优化与测试...

    面向对象的程序设计(2019)第二单元总结 I  对问题的初体验 在开始OO之旅前,对OO电梯早有耳闻.这一次终于轮到我自己实现OO电梯了.首先从顶层需求出发对电梯系统进行分析,对象包括电梯.任务和乘 ...

  4. 结对项目——电梯调度(5)

    结对项目--电梯调度(5) by 潘 Part 0 进度概述 目前为止,整个项目已经完成,底层逻辑.UI界面.软件测试都已完成,对底层逻辑:对调度算法进行了模块化,使得每种调度算法存在一个专门的函数, ...

  5. 结对项目开发电梯调度 - 整体设计

    一.系统介绍 1. 功能描述 本电梯系统用来控制一台运行于一个具有16层的大楼电梯,它具有上升.下降.开门.关门.载客的基本功能. 大楼的每一层都有: (1) 两个指示灯:  这两个指示灯分别用于指示 ...

  6. [附加题] 结对项目对接的苦痛

    [附加题] 结对项目对接的苦痛 本次很荣幸地,我的程序作为很多程序员队伍的备胎计算模块被加入了各大程序的附加题参考中,有以下几位同学都曾与我进行模块的对接: GNU_Linuxer 马克斯 kanel ...

  7. 响应式编程入门:实现电梯调度模拟器

    据说每个程序员等电梯的时候都思考过电梯的调度算法-所以怎么动手实现一个呢?虽然这个场景貌似有些复杂,但却非常适合使用响应式编程的范式来处理.下面我们会在 RxJS 和 Vue 的基础上,一步步实现出一 ...

  8. 网页附加题写出下图的html,附加题(写HTML文件):根据给定的博客名单,自动生成HTML网页...

    收集了学生CSDN博客地址很久了,但一直没来得及整理成贺利坚老师的完美班级网页名册.今天突然想,一共有6个班学生,如果手动写的话,太费事了.我们程序员,就是让费事不费脑的工作自动化,即使是第一次花很多 ...

  9. 结对项目开发-电梯调度

    结对项目开发-电梯调度 n设计和实现一个电梯调度瞄准两个正确性和性能,在托管代码. n技能训练: na)需求分析 nb)高层次设计(界面,信息隐藏,松耦合) nc)设计文档 nd)算法设计 n1 .背 ...

最新文章

  1. Blender从头到尾创建低多边形角色学习教程 Low Poly Characters – Blender Bitesize Course
  2. centos7 安装apache+php+memcache
  3. Windows 安装MySQL5.7.0+ 服务
  4. php云开发要去的地方
  5. 一个自动完成插件的类(TextBox 版)
  6. python tkinter 弹窗_Python:tkinter-Parent获取弹出窗口的返回值
  7. Python小白的数学建模课-22.插值方法
  8. java 二分搜索获得大于目标数的第一位_程序员数据结构算法编程,二分查找搜索算法的原理与应用介绍!...
  9. linux dd tar 整盘备份,tar(压缩,打包,备份),dd(备份,建档),cpio
  10. 从“运维”处谈OFO失败
  11. 2022最新第四方聚合支付系统源码+详细搭建教程
  12. html 按钮id,获取当前按钮或者html的ID名称
  13. 阿里国际站各数据更新时间汇总
  14. 一个有用的Win32消息处理宏HANDLE_MSG
  15. ffmpeg实现变速播放
  16. MATLAB设置坐标轴颜色
  17. 一个屌丝程序猿的人生(二十八)
  18. [跟进]_淘宝推出搜索引擎
  19. 【翻译】DPI and Device-Independent Pixels
  20. dmesg 时间戳转换为时间

热门文章

  1. jsp中id ,name 我的小小认识
  2. 计算机磁盘有系统保留,win10重做系统保留桌面文件-win10重置系统选择保留文件时,会保留安装在系统盘以及其他磁盘的软件吗?...
  3. 为什么一定要亲身经历了之后才能明白?
  4. three.js 精灵模型-树林效果
  5. 怎么设计问卷调查?4个步骤教会你!
  6. 简述web服务器的性能指标,web性能指标
  7. 电脑如何压缩jpg图片的大小?怎么把jpg图片kb变小?
  8. 教你打造一套很受用的高成交转化系统
  9. html记录访问量,显示访客信息 js记录访问次数
  10. 各个快递公司的电话、网站地址