Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] --11061188刘强
队员:刘强(11061188) 林谋武(11061169)
结对编程:
结对编程的优点:
1、 两个人合作,相比于一个人自己奋斗而言,更能激发自己的潜能;我们在合作过程中,互相学习,互相磨合,各自发挥自己的长处,并及时提醒对方工作上的失误,能让我们的工作进行得更加顺利;
2、 两人在合作过程中彼此交流,能更快速地发现设计中出现的漏洞,及时改正错误,提高工作效率;
3、 两人合作相较于多人团队合作而言,更能促进彼此的交流,因为两人合作过程中,有什么问题可以直接提出,并在两人商讨之后得到满意的结论,若参与者数量太多,反而不好调配;
4、 虽然我们两个人的水平有一定差距,但是我们彼此信任,共同努力,最终还是实现了一个比较理想的算法,这是我们共同的劳动结果;
结对编程的缺点:
1、 两人的工作进度相互牵制很严重,若一人拉后腿,则工作总进度受到很大影响;
2、 产生分歧之后要尽快解决,否则容易影响默契,阻碍工作进行;
对中人员评价:
1、 刘强:
优点:1、编程能力强、算法设计能力强;2、动手能力强,能快速完成自己的任务;
3、性格开朗积极,比较会缓和气氛;
缺点:有时侯容易较真
2、 林谋武:
优点:1、学习态度比较好,不懂就问;2、做事认真负责,对自己份内任务比较重视;
3、性格温和,不易动怒;
缺点:有时候比较爱偷懒;
关于Information Hiding,Interface design,Loose coupling:
1、 信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。我们在实现算法时,参考了原有代码,并翻阅了相应资料有,最终确定对于不同类的不同信息隐藏操作;这是对于我们使用面向对象语言的一次很好的锻炼;
2、 接口是用来表示某一特定的功能模块,在工程中,如果遇到某些功能就可以把它封装起来,并在类中实现它。我们之前上过面向对象的课程,对接口设计有个大致的感性认识,经过这次程序实现,我们进一步提高了我们对接口和封装的理解,熟练了操作;
3、 松散耦合是指模块之间要尽量保持独立,模块之间尽量少的牵连,以免修改一个模块后导致其他模块的异常。这样便于程序的修改和管理。虽然这次的作业并没有让我们直接参与到模块的独立设计中,但是我们也确实感受到模块独立的好处,在以后的学习过程中,我们会进一步学习使用这种方式的;
关于“契约式设计”:
契约式设计或者Design by Contract (DbC)是一种设计计算机软件的方法。这种方法要求软件设计者为软件组件定义正式的,精确的并且可验证的接口,这样,为传统的抽象数据类型又增加了先验条件、后验条件和不变式。这种方法的名字里用到的“契约”或者说“契约”是一种比喻,因为它和商业契约的情况有点类似。其优点:1、让人更好地理解O-O方法和软件构造;2、为除错、测试、和更一般的质量保证提供了一个有效的框架;3、它是一种给软件部件建立文档的方法;
单元测试:
1、 最直接的原因是保证我们函数的正确性,如果这个函数在没有保证正确的情况下就被上层代码调用,那么随着项目的深入,调用层次会越来越深,就很容易产生严重的BUG问题,从而增加开发难度,降低开发效率!
2、 根本原因是减轻我们开发人员的工作量,使我们的工作变的轻松(这只是一个相对说法)!
3、 Unit Test测试截图如下:
UML图:
核心算法:根据rush hour test要求,需要我们合理分配上下班高峰时的电梯调度
1)首先迭代判断四个电梯状态:
a) Direction.Up:调用PickUp(elev)函数
b) Direction.Down:调用PickDown(elev)函数
c) Direction.No:调用NewReq(elev)函数
2)关键函数:NewReq(elev)
A) 首先判断0/1层请求是否达到累计请求书的70%,若达到,则将当前状态为Direction.No的电梯调度之0层,并清空请求次数数据
B) 一当前层为参照,按照(楼上的上行,楼上的下行,楼下的下行,楼下的上行)顺序依次进行电梯调度。例如:楼上的上行:
(1) 若有n个楼上层处于状态,则寻找n个楼层中的最大值,将其加入电梯目标层列表(ArrayList)。
(2) 对于当前层与最高层之间的其他上行楼层,通过调用函数PickUp() 函数实现停靠
3)对于PickUp(elev)/PickDown(elev)函数,实现对顺路楼梯层的稍带,详见代码注释
[附加题] 改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享。
首先,就原有的StopAtEach方法而言,此算法的实现既是非常低效率的算法,同时也非常的不符合现实状况;因为在现实生活中,我们并不可能让我们的电梯一直处于运行状态下,且在每一层都会有暂停的状况;所以我们提出了自己的改进,就是对应于输入的指令做出的相应的回应,方法定义为NewReg,并在考虑乘客体重的情况下会有不同的运行速度,更符合实际;而同时,我们考虑到电梯运行过程中,不同乘客的不同上下楼的需求,设计了不同的方法,以进行不同的实现,这样能更好地迎合现实中的情况;最后,我们还考虑了电梯运行中的顺路带人问题,实现了PickUp和PickDown的方法;即若乘客的目标楼层相对于当前楼层的方向与电梯运行的方向相同、且乘客体重适宜,我们会顺路带走乘客。这些方法的实现,更好地反映了现实情况,同时,不同方法的信息共享和信息隐藏条件都由我们设计,让我们得到了更好的练习。
Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] --11061188刘强的更多相关文章
- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:刘耀先-11061183,罗凡-11061174
本次为我们两个人的第一次结对编程.从总体而言,我们对结对编程比单人编程略显不适应.但是经过一段时间的磨合,我们逐渐的习惯了这种编程方式. 1. 结对编程的优缺点 结对编程的优点: (1) ...
- 软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] [附加题]
软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] [附加题] 首先,在分组之前,我和室友薛亚杰已经详细阅读了往届学长的博客,认为电梯调度 ...
- 软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]
软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] 说明结对编程的优点和缺点. 结对编程的优点如下: 在独立设计.实现代码的过程中不 ...
- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]
作业提交时间:10月9日上课前. Design and implement an Elevator Scheduler to aim for both correctness and performa ...
- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:谢勤政-11061197,吴润凡-11061185
一,关于结对编程 结对编程的优点: 1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力. 2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高 ...
- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试][关于电梯调度算法的附加思考]:刘耀先-11061183,罗凡-11061174
本文为对于电梯调度算法的三个附加题思考 1.改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享. <1>进一步提高API定义 ...
- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:思考题——谢勤政11061197
第一题: 大楼里面的电梯一般分区域,或考虑思考题第四题的情况,运行楼层不一样的电梯属于不同的区域.然后在接口IRequest和IPassenger还有IElevator里面都加上int area这个属 ...
- Pair Project —— Elevator Scheduler
结对编程人员 12061153 刘丽萍 12061154 冯飘飘 说明结对编程的优点和缺点. 结对编程的优点: 以前都是自己一个人编程,对于相互结对或者团队编程都没有接触过.而自己在写代码时不可避免的 ...
- 关于软件工程结对编程作业 PairProject : Elevator Scheduler(电梯调度算法的实现与测试)的总结
1)结对编程队友 1106xxxx 张扬 1106xxxx 杨军 其中,此项目的编程实现主要由前者完成. 2)关于结对编程 结对编程的优点: 最直接的一点:在结对编程中,由于有另一个人在你身边和你配合 ...
随机推荐
- 绿色 或者 免安装 软件 PortableApps
Refer to http://portableapps.com/apps for detail. Below is just a list at Jan-01-2017 for quick show ...
- java 重载规则
首先看Java重载的规则: 1.必须具有不同的参数列表: 2.可以有不同的返回类型,只要参数列表不同就可以: 3.可以有不同的访问修饰符: 4.可以抛出不同的异常: 5.方法能够在一个类中或者在一个子 ...
- DashPathEffect
DashPathEffect 可以实现以动画的形式画线的效果. 通过setPathEffect()方法为画笔Paint对象设置绘制路径的特效. PathEffect pathEffect=new Da ...
- SSH框架总结
首先,SSH是由多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框架的系统从职责 ...
- [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】
[python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...
- bean生命周期
一.Bean的定义Spring通常通过配置文件定义Bean.如:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:s ...
- 如何实现自定义的android WebView错误页
一般来说,可能第一时间想到的是自定义一个html来替代webview内置的异常页面. 但是实际操作时,这种方法比较困难. 这里介绍一个简单的替代方案,希望能有所帮助. 可以采用嵌套layout的方式 ...
- 增强:MB1A物料价格检查
INCLUDE:MM07MFP0_PICKUP_AUSFUEHREN FORM:pickup_ausfuehren这是MB1A的PAI的逻辑流里的字段检查 在FORM开始的地方: '. DATA:S_ ...
- Android 判断字符串是否为空
TextUtils.isEmpty(str) 可以判断字符串是否为null或者"",当是的时候为true,否的时候为false
- 4412开发板升级4.2之后改了logo开机后屏幕闪解决办法
荣品4412开发板升级到4.2请注意增加虚拟机内存. 问:荣品4412开发板升级到Android4.2之后,改了logo.4412板子开机后,过一会屏幕就一闪一闪,是什么原因? Android4.2编 ...