成员  10061141 刘明    10061169 孙胜

设计与设计心得

10061141  刘明

在Scheduler中对于IRequest和IElevator的调度,将未进入电梯的乘客申请压入一个Arraylist中即 _Passenger_Wait并对四个电梯进行一个较优的选择,然后将该乘客装入该电梯,存入一个Arraylist中即elevStop[]电梯将要将乘客运往的目标楼层,进一步确定进入电梯的乘客的目标楼层的排序与调度。

其中对_Passenger_Wait的选择方法为:选择一个 HistoryDirection与申请运行方向不违背(相同或者电梯停靠未运行),离其距离最近并且剩余装载量FreeCapacity大于100或者乘客的平均体重的电梯,让其进入。停靠电梯的处理,这种情形比较多。如果电梯是到达了一个目标楼层后,就在数组_Passenger_Wait里该电梯对应的ArrayList里 面去掉当前电梯所在的楼层。这时候,如果数组_Passenger_Wait里该电梯对应的ArrayList不为空,就是说电梯的还有目标楼层没有到达,那 么就将电梯的下一个目标设为数组_Passenger_Wait里该电梯对应的ArrayList里面最近的那个目标楼层(这里,向上运行的电梯和向下运行的电梯情况不同);如果数组_Passenger_Wait里该电梯对应的ArrayList为空,即电梯已经完成了之前数组_Passenger_Wait里该电 梯对应的ArrayList里面的所有任务,那么如果这个时候所有楼层里都没有人发出请求了,那么电梯就往第零层和第一层走,如果有请求,那么电梯就去发 出请求的地方接人。

运行电梯的处理,又分为向上运行的电梯和向下运行的电梯,但这是一个对称的过程。如果电梯和电梯目前要前往的目标楼层之间楼层有和电梯运行方 向一样的的方向请求时,并且电梯的剩余重量还大于所有人统计平均质量时,就可以使电梯在这一层里停靠一下,接上发出请求的乘客。接上乘客之 后,乘客就会发出目标请求,目标请求会加入到数组elevStop里该电梯对应的ArrayList里面。

10061169  孙胜

1. 考虑到电梯的空置状态:

上班高峰期:两台电梯停在1层,两台电梯停在0层,这样可以减少乘客的等待时间。

下班高峰期:电梯全部停在中间层,这样可以满足不同楼层的人离开,减少等待时间。

平时情况:电梯停留在一层。

2.电梯运行情况:

电梯环形运行,当发生外部请求时:

电梯向上运行,响应的顺序为:同向上方

逆向上方

逆向下方

同向下方

电梯向下运行,相应的顺序为:同向下方

逆向下方

逆向上方

同向上方

当发生内部请求时:

电梯向上运行,响应的顺序为:上方,下方

电梯向下运行,响应的顺序为:下方,上方

如果请求超出范围,则报错删除内部和外部请求。

3.考虑高峰期优化方法:

上班高峰:

电梯空置状态

运行情况:三部电梯只接受上行请求,一部正常运行

下班高峰:

电梯空置装填

运行情况:三部电梯只接受下行请求,一部正常运行

4.电梯调度算法:

设置一个外部请求列表,设置一个内部请求列表,

设置方法,把每个外部请求都加入四个队列,按照时间先后来响应,有一部电梯响应之后则均删掉;把内部请求加入进入的电梯,等响应之后则删除请求。

根据乘客从第1层和第0层进入电梯的比例判断是否是上班高峰,是否启动上班电梯模式。

根据乘客从第1层和第0层出电梯的比例判断是否是下班高峰,是否启动下班电梯模式。

初始化之后,时钟开始计时

乘客:

如果当前时间和乘客请求的时间一致,乘客进入电梯并发送上行或下行请求。

如果电梯停在乘客所在楼层,并且开往方向与乘客去向一致,电梯停下,电梯开关门时间发生改变,乘客发出目的地请求,乘客的状态变为在里面。

如果乘客到达目的地,乘客的状态变为到达。

电梯:

根据时钟和电梯运行情况,对电梯的状态进行更新。

电梯停时,发送电梯停信号。

5.我们算法的特点:

首先,算法根据不同时间段的人员流动情况对四部电梯进行不同工作模式的分配,在上班高峰时多数电梯不接受下行请求,在下班高峰时多数电梯不接受上行请求,这样可以节省开关门和等待乘客进出电梯的时间,可以有效地节省乘客的乘坐电梯的时间。

再者,我们根据人员对电梯的请求分为内部请求队列和外部请求队列,根据不同的请求加入队列的顺序不同,对请求进行排序,可以很好的控制电梯开关门的顺序和时间。

其次,我们根据人员流动的比例判断高峰时间,这样可以很好的控制电梯运行模式何时开启,对电梯进行动态规划。

心得体会:

评价模块设计优劣的三个因素为:Information Hiding :信息隐藏,Interface design:接口设计,Loose couping:疏耦合。模块功能完善化,消除重复功能,降低模块接口的复杂性。每个模块都可以独立的开发,测试。

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

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

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

在本次软工作业中,我深刻的体会到这三方面的重要性。

对一个程序而言,会有很多的模块,每个模块都有自己的功能,每个模块代表不同部件是如何运行的,比如说在本次作业电梯程序中,电梯类负责电梯的属性和电梯运行;乘客类负责发送请求,根据乘客的需求驱动电梯类运行;commons类用于存放接口,基类,结构等方法用于服务其他类的调用;Scheduler类用于存放电梯调度算法,使电梯按照算法运行搭载乘客;Program类是主模块,通过主模块的运行调动相应的模块,使电梯正常运行。

每个模块都有自己需要隐藏的信息,不能让别的类随意改动,并且每个模块都需要有自己的处理方法,不能随意调用其他的类,这样写会比较混乱。我们在设计接口或者方法的时候,命名的时候根据实意进行命名,方便他人阅读和理解,减少了模块之间直接的复杂数据的传递,基本上都是定义好的接口和方法。疏耦合是软件工程中设计追求的,尽量减少两个模块之间的联系,尽量通过主模块的调用来联系其他模块。

软件工程的优劣因素不仅是对我们编写的程序的使用情况的评测,更是提醒我们要养成较好的编程习惯,这样有利于程序的可移植性和可测试性,对我们今后有很大的帮助。

转载于:https://www.cnblogs.com/WWW-Buaa/archive/2013/01/09/2853849.html

Pairwork2 总结相关推荐

  1. pairwork2测试作业

    测试产品:必应缤纷桌面 10061184 王熹 付博扬 先上bug 1.无法搜索.在舍友的Win8环境下,若禁用IE浏览器,第一次使用缤纷桌面时,搜索功能完全失效.无论是回车键搜索还是点击图标搜索均失 ...

  2. PairWork2必应词典测试补交作业-孙胜-刘明

    结对编程作业人员:10061141  刘明     10061169   孙胜 第一部分: BUG1:生词本功能存在BUG 使用步骤: (1)单击扩展应用 (2)选择必应生词本 (3)单词添加 BUG ...

  3. 结对作业2:单元测试

    (201421123002 翁珊:201421123006 黄月梅:201421123007 徐晓珊) 题目要求: 结对编程实现上述功能,同样的,在程序正式开发之前,请先预估下PSP每个环节的消耗时间 ...

最新文章

  1. 关于ARM启动的一篇文章
  2. ASP.NET自定义控件组件开发 第一章 第二篇 接着待续
  3. 谷歌Android运用商铺下架染辣手机软件
  4. ThinkPHP5下自己写日志
  5. [vue] vue中什么是递归组件?举个例子说明下?
  6. django-验证码
  7. flask web开发是前端还是后端_Flask Web开发实战:入门、进阶与原理解析 PDF 全格式版...
  8. Factorization Machine 1
  9. C.Fountains(Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2)+线段树+RMQ)...
  10. dll反编译工具ILspy下载及使用
  11. 科学计算机怎么直接显示10的多少次方,科学计算器怎么开n次方
  12. 虚拟机处理器核数与物理cpu的关系
  13. 南开大学2019年数学分析考研试题
  14. 小明左右手分别拿了两张牌,黑桃十和红心八,现在交换手中的牌。编写一个程序模拟这一过程:两个整数分别保存两个变量,将这两个变量的值互换,并输出互换后的结果
  15. promise的实例方法、静态方法
  16. 深度学习如何“助攻”医学影像?我们来听听学界大拿的解释 | CNCC 2017
  17. matlab实验报告七,matlab实验报告(实验).doc
  18. 《笨办法学Python》——习题5
  19. Django+小程序打造个人助手-----2小程序项目工程目录
  20. 全国分省图斑级统计分析之安徽

热门文章

  1. JS 面向对象实例 prototype
  2. encoder decoder模型_3分钟|聊一聊 Decoder 模块
  3. MATLAB学习笔记(十)
  4. 注册围框html,一种可调模具围框的制作方法
  5. CVX 几何规划 两个官网样例
  6. Python元组的操作
  7. phpMyAdmin链接MySQL拒接_phpmyadmin连接MySQL服务器被拒绝
  8. 不需要mysql的php博客_不用数据库,做留言板(PHP)
  9. python下俄罗斯方块的游戏设计_[源码和文档分享]基于Python的PyGame的俄罗斯方块游戏设计与实现...
  10. php商品低库存报警,Magento中产品库存不报警解决方案