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)关于结对编程 结对编程的优点: 最直接的一点:在结对编程中,由于有另一个人在你身边和你配合 ...
随机推荐
- Android 6.0权限改变
对于6.0以下的权限及在安装的时候,根据权限声明产生一个权限列表,用户只有在同意之后才能完成app的安装,造成了我们想要使用某个app,就要默默忍受其一些不必要的权限(比如是个app都要访问通讯录.短 ...
- Evolutionary Computing: multi-objective optimisation
1. What is multi-objective optimisation [wikipedia]: Multi-objective optimization (also known as mul ...
- [HTML/Javascript] JS判断IE浏览器各版本
代码参考: function isLowIEVersion() { var browser = navigator.appName var b_version = navigator.appVersi ...
- ZACC_DOCUMENT
method if_ex_acc_document~change. data: wa_extension type bapiparex, ext_value() type c, wa_accit ty ...
- YY前端课程2
1. alt属性对SEO优化很重要 2. 最早的网页是靠table布局标签,后来用div+css进行网页重构(因此现在网页设计的名字由网页设计变成了网页重构) 3. 静态网页和后台没有交互 动态网页和 ...
- Angular js 之一些简单的js操作
1.<div ng-if()> </div> 括号里面是布尔值 如果是false那么你ng-if的那个dom就会不显示.(感觉这是angular js中最给力的一点) 一般会 ...
- 如何通过命令行创建和设置一个MySQL用户
我想要在MySQL服务器上创建一个新的用户帐号,并且赋予他适当的权限和资源限制.如何通过命令行的方式来创建并且设置一个MySQL用户呢? 要访问一个MySQL服务器,你需要使用一个用户帐号登录其中方可 ...
- Python 之路 Day5 - 常用模块学习
本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...
- PHP数学函数
Abs: 取得绝对值. Acos: 取得反余弦值. Asin: 取得反正弦值. Atan: 取得反正切值. Atan2: 计算二数的反正切值. base_convert: 转换数字的进位方式. Bin ...
- Git 分支
Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照,某一次的提交指向这处时刻的文件快照,看起来就像每次提交都保存了当时的文件,连续的提交形成一条长链 分支 指向某一个特定的提交,不同的 ...