结队成员:林璐10061142-孙胜10061169

一、pair work照片以及优缺点

  1.1 pair work优缺点

    优点:1.两个人一起编程效率很高,因为不会想去边编程边听歌,或者编一会儿去看会电影。两个人都全身心的投入到设计算法,编程的过程中,甚至过去了一整天都没什么感觉;

       2.面对复杂的算法思路,两个人可以一起思考,随时商量,克服自己的思维局限。就像上面的照片,是我们设计算法时的记录。

       3.在编程过程中可以分工,我们把整体的结构搭好之后,可以把工作分成几个模块,两个人分别做,并且随时可以商量调整。比如孙胜负责写外部、内部请求的存储方法,我负责写计算下一个目标地址的方法,然后两个人和在一起,调整错误,就比一个人写的效率高很多。

    缺点:时间不好协调统一。

  1.2 孙胜的优缺点

    优点:1.查找资料的能力强,我们的算法灵感都来自于这些资料;

       2.交流能力很好,在商量算法和具体实现的时候,碰到问题能够很好的表达,所以我们的交流一直顺畅无阻;

         3.很主动,我们的工作一旦商量好怎么分配,她就能很快的进入角色,并高质量的完成;

       4.特别谦和,所以我们一起结队的好几天都能很愉快的度过。

    缺点:1.对工程的整体把握不是很清晰,各个类的关系和实例的相互调用理解不是很深。

二、关于information hiding,interface design,loose coupling等好的设计方法的学习

  这些设计方法很大程度上决定了一个模块设计的好坏,它们可以使模块功能完善化,消除重复代码和功能,降低模块接口的复杂程度,是每个模块都可以独立开发、测试,并且当其他模块改变后,可以保持自己的独立性。

  information hiding 信息隐藏原则:将每个程序的成分隐藏在模块内,尽可能少的显露其内部处理,可以提高软件都可修改性、可测试性和可移植性;

  interface design 接口设计遵循的原则:简单原则,要求接口方法命名规则,接口相关参数的数据类型简单,减少模块间直接性的复杂数据的传递。封闭原则,模块内部的处理逻辑修改时,不会影响到其他模块的使用。完整性原则:可以方便的利用继承,重写,覆盖等技术手段来提高代码的复用率。接口隔离原则,使用多个专门的接口比使用单一的接口要好,在接口中禁烧公布public方法。

  loose coupling 松耦合:耦合是指模块间依赖的程度的度量,模块设计追求的是强内聚,松耦合。耦合的强度依赖于:一个模块对另一个模块的调用,一个模块向另一个模块传递的数据量,一个模块施加到另一个模块控制的多少,模块之间接口的复杂程度。尽量减少两个模块之间的直接调用和控制,两个模块之间的联系最好全都通过主模块的控制和调用来实现。

  这次电梯调度的项目,我对此有些体会,我尽量把一个会被多次调用的功能写成一个模块,这样就直接调用模块,因此修改的时候,只需要修改该模块,而不需要找到那些调用的地方再做大量冗余修改。

  这次比较大的项目让我觉得对软件的整体设计很重要,体会并用好这些设计方法可以极大地提高软件的可移植性,减少很多调试修改工作。

三、类图

  3.1 需求描述:

  我们需要设计一个四路电梯调用系统(Elevator Dispatching, ED)允许乘客进入电梯,并被运送到目标楼层。

    乘客想从x层到y层,当乘客在x层电梯门口按下上/下方向键之后,ED响应该外部请求调度程序处理该请求,调度电梯的运行,结合电梯的载客情况(过载则待有空余重量再接受上电梯请求),使之最终到达该楼层接乘客。乘客进电梯,按键选择目标楼层,电梯对乘客信息以及内部请求信息进行处理,改变电梯载客和运行状态,以便判断并处理其它楼层乘客的请求,最终电梯到达乘客目标楼层,开门送客,并改变状态参数。

  3.2 对粗体字的名词短语处理得到用例:

    乘客,Passenger

    电梯,Elevator

    调度程序,Scheduler

    请求,Request

  3.3 Framework:

SigmaPassenger类: 提供passenger的体重姓名等个人信息,通过引发request,进出电梯等与其他类传递消息;

PassengerReq类:包含请求信息的重要属性(请求时间,源楼层,目的楼层,方向,请求电梯),与Elevator和Passenger交流;

SenElevator类:包含电梯运行的各个参数(电梯编号,最高楼层,限重,方向,目的地,状态等),限重与passenger相关,运行与request相关。

   Sheduler类(我们的工作):根据调度算法,对电梯的运行进行调度。

  3.4 类图

四、算法思路

  我们的算法主要优在对请求的分类存储,以及对电梯下一个目标楼层的计算。

  4.1请求的分类按序存储

   我们把请求分为外部请求和内部请求,外部请求是乘客在电梯外面的上下行方向请求,内部请求是乘客在电梯内部的目的地请求。将二者分别放在List<IRequest>OuterReqList和List<IRequest>InnerReqList中保存,并按照下列权值进行从大到小的顺序。每次一旦有一个请求(事先分好是内部还是外部请求),按照下列权值插入到List的相应位置,这样可以保证每次List中的第一个元素都是这类请求最先应该执行的。

  外部请求的权值从大到小:

    若电梯向上运行:同向前方的请求>逆向前方的请求>逆向后方的请求>同向后方的请求

    若电梯向下运行:同向后方的请求>逆向后方的请求>逆向前方的请求>同向前方的请求

  内部请求的权值从大到小:

    若电梯向上运行:上方的请求>下方的请求

    若电梯向下运行:下方的请求>上方的请求

  4.2 电梯的下一个目标楼顶层的计算

  若电梯向上运行,那么目标楼层的权值应该是:同向前方的外部请求or上方的内部请求(要判断谁更近)>highestFloor

  若电梯向下运行,那么目标楼层的权值应该是:同向前方的外部请求or下方的内部请求(要判断谁更近)>0

  这部分的代码最难缠,因为有很多情况要考虑,比如如果外部请求的List为空或者内部请求的List为空,等等,我们也是因为这部分的算法考虑欠妥因而调试了很久,耽误了很久。

  4.3 算法的灵感来源

  这是我们从网上查找到资料中的一个流程图,是关于请求的权值计算,正是这个图帮助我们设计我们的算法。

  

  4.4 预计完成的更优化的算法(因为时间问题没能实现)

  主要是针对高峰期的考虑。因为上班高峰大部分都是上行的请求,而下班高峰大部分是下行的请求。因此,我们计划在上班高峰时使用3个电梯只满足上行请求命令,而1个电梯正常运行满足少数的上下穿梭,同理下班高峰时使用3个电梯只满足下行请求命令,而1个电梯正常运行满足少数的上下穿梭。

  我们可以通过对乘客请求中满足from = 0,1的比例来判断是否是上班高峰,而对to = 0,1的比例来判断是否是下班高峰。

四、pair work感想

  这次pair work有很多收获,也有一些遗憾。

  我第一次与别人合作完成一个项目,感受到了很多好处,我明显觉得在两个人一起工作时自己的效率变高了,而且思路也开阔了不少。尽管这个项目挑战很大,但是我们还是咬牙完成了,得益于我们良好的沟通和相互的支持鼓励。

  但是,有一点遗憾是没能尽早的开始,以致最后调试的时间很少,很多边界情况比如楼层请求超出范围之类的没时间考虑,最后我们那个分上下班高峰的想法也没能实现。

五、我的工作

  主要是对framework的整体把握和模块搭建,以及计算下一个目标楼层方法的编写。

转载于:https://www.cnblogs.com/linlu1142/archive/2012/10/22/2734775.html

4路电梯调度——pair program总结相关推荐

  1. 现代软件工程 结对编程 (II) 电梯调度

    现代软件工程 结对编程 (II) 电梯调度 Pair Project II: Elevator Scheduler <现代软件工程> 的结对编程作业,  作者: 邹欣 怎样设计API?  ...

  2. 现代软件工程 结对编程 (II) 电梯调度 算法和测试框架

    [很多同学完成了上一个结对编程项目后,  很想知道下一个项目是什么, 我们这次要练习如何设计 接口, 测试框架,  和算法. ] [博客园的朋友们也可以试一试怎么高效地解决这个问题] 现代软件工程系列 ...

  3. PairProject 电梯调度 【附加题】

    [附加题] 改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享. 目前的设计有什么缺点, 你会如何改进它? 1.之前判断电梯是否闲置的函 ...

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

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

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

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

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

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

  7. android电梯程序设计,课内资源 - 基于Android实现的电梯调度模拟

    一.使用说明 1.1 项目简介 某一楼有20层,操作者可以通过使用5部电梯从起始楼层来到达指定的楼层.本项目通过实现电梯调度,来模拟实现操作系统的调度过程,并且学习Android环境下使用Java的多 ...

  8. 电梯调度需求调研报告

    组员 石鹤 李海超 1 引言    1.1 目的 本需求规格说明书对电梯调度系统进行简单的分析,定义总体要求,给出了背景.性能要求.功能分析及实地考察的内容. 系统主要用户是电梯管理员.电梯维护人员. ...

  9. 教学楼电梯调度需求分析

    1.引言 1.1 编写的目的 分析学校教学楼电梯调度在高峰或低谷时期运行是否快捷方便,以及安全性等问题,为后续开发电梯调度解决方案,系统设计与维护做好准备. 1.2 背景说明 学校教学楼楼层有18层, ...

最新文章

  1. 从使用角度看何为zookeeper
  2. HashMap方法源码
  3. docker中 system limit for_springboot中redis的缓存穿透问题
  4. 保密工作中非密计算机工具检查,【保密知识】别在保密工作面前耍“小聪明”哦~...
  5. 耐用的蓝牙耳机推荐,现在比较好的蓝牙耳机点评
  6. 怎样设定计算机屏幕锁定时间,电脑屏幕锁屏时间怎么设置
  7. 利用多线程中线程休眠----sleep实现简单的计时器以及时钟功能
  8. 前端 传表格多条数据 给后台接收 (HTML前端表格多条数据JSON封装后;异步提交到后台处理)
  9. gitee搭建个人博客教程
  10. 社交网络的发展及趋势
  11. 扫描文件转换成word软件
  12. 系统平台运营热门店铺模式
  13. 重定向和转发的区别+使用情景
  14. 考研计算机报录比最高的手机,考研 | 报录比最高专业TOP10,就离谱!
  15. swagger屏蔽某些接口
  16. 2022电大国家开放大学网上形考任务-人体解剖生理学(本)非免费(非答案)
  17. HouseRobber II
  18. BN层的解释说明(包含梯度消失和梯度爆炸的原理及解决方法)
  19. 搞懂Pandas数据合并,这一片就够了
  20. 决策树,基尼系数,泰勒级数

热门文章

  1. 10.26 酷狗音乐校招前端一面经历
  2. 分享个免费资源导航神奇网站【面具星球】
  3. springboot学校学校运动会信息管理系统毕业设计-附源码
  4. 莱昂纳多或出演乔布斯传记电影
  5. 摘抄-对最好程序员的感想
  6. ubuntu 安装usb免驱无线网卡TP-LINK WN726N
  7. 文件权限修改,启用安全选项卡 - Windows XP
  8. 第5章分数的位置及标准化分布
  9. Typec转HDMI 4K30HZ扩展芯片方案CS5261和CS5266设计参数及电路对比
  10. [经验分享]破解Word中保护文档密码