队员:刘强(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刘强的更多相关文章

  1. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:刘耀先-11061183,罗凡-11061174

    本次为我们两个人的第一次结对编程.从总体而言,我们对结对编程比单人编程略显不适应.但是经过一段时间的磨合,我们逐渐的习惯了这种编程方式. 1.  结对编程的优缺点 结对编程的优点: (1)       ...

  2. 软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] [附加题]

    软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] [附加题] 首先,在分组之前,我和室友薛亚杰已经详细阅读了往届学长的博客,认为电梯调度 ...

  3. 软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]

    软件工程  ---   Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] 说明结对编程的优点和缺点. 结对编程的优点如下: 在独立设计.实现代码的过程中不 ...

  4. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]

    作业提交时间:10月9日上课前. Design and implement an Elevator Scheduler to aim for both correctness and performa ...

  5. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:谢勤政-11061197,吴润凡-11061185

    一,关于结对编程 结对编程的优点: 1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力. 2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高 ...

  6. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试][关于电梯调度算法的附加思考]:刘耀先-11061183,罗凡-11061174

    本文为对于电梯调度算法的三个附加题思考 1.改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享. <1>进一步提高API定义 ...

  7. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:思考题——谢勤政11061197

    第一题: 大楼里面的电梯一般分区域,或考虑思考题第四题的情况,运行楼层不一样的电梯属于不同的区域.然后在接口IRequest和IPassenger还有IElevator里面都加上int area这个属 ...

  8. Pair Project —— Elevator Scheduler

    结对编程人员 12061153 刘丽萍 12061154 冯飘飘 说明结对编程的优点和缺点. 结对编程的优点: 以前都是自己一个人编程,对于相互结对或者团队编程都没有接触过.而自己在写代码时不可避免的 ...

  9. 关于软件工程结对编程作业 PairProject : Elevator Scheduler(电梯调度算法的实现与测试)的总结

    1)结对编程队友 1106xxxx 张扬 1106xxxx 杨军 其中,此项目的编程实现主要由前者完成. 2)关于结对编程 结对编程的优点: 最直接的一点:在结对编程中,由于有另一个人在你身边和你配合 ...

随机推荐

  1. 转:用C++实现的一种插件体系结构-----概述

    用C++实现的一种插件体系结构-----概述 本文讨论一种简单却有效的插件体系结构,它使用C++,动态链接库,基于面向对象编程的思想.首先来看一下使用插件机制能给我们带来哪些方面的好处,从而在适当时候 ...

  2. 利用eclips创建一个maven项目

    最近在写新项目,由于以前没有用过Maven,所以在创建Maven 项目的过程中遇到了很多问题...现在将整个创建过程给记录下来,方便查看 创建maven项目 创建完成项目后配置maven项目 修改we ...

  3. adb shell使用

    adb shell可以用来操纵数据库 1.在cmd界面 输入adb shell 进入adb shell 2.使用cd 切换到工作目录:使用ls查看文件 3.使用sqlite3+数据库名字 打开某个数据 ...

  4. html的a链接的href怎样才另起一个页面

    在后面加上target ="_blank",就可以,正如: <ul class="nav navbar-nav navbar-right" style=& ...

  5. 自定义UI集成微信、QQ、微博分享功能

    目前社会化分享是一个非常常见的功能,通过阅读官方文档可以进行对应平台的分享.在项目中原本有微信的分享,后来需要集成QQ和微博的分享,于是想着用ShareSDK,在使用的过程中发现ShareSDK中的w ...

  6. Js数组排序函数sort()

    JS实现多维数组和对象数组排序,用的其实就是原生sort()函数,语法为:arrayObject.sort(sortby)(sortby 可选.规定排序顺序.必须是函数.) 返回值为对数组的引用:请注 ...

  7. ZOJ 2048 highways

    题目 比我想象地要容易很多..一开始想得太复杂了,本来想试一下kruskal算法的,嫌麻烦..还是用了之前1203的prim算法...以为要注意这道题的输出顺序,结果不用,直接输出就可以了,就是注意一 ...

  8. PE文件学习系列二 DOS头分析

    合肥程序员群:49313181.    合肥实名程序员群 :128131462 (不愿透露姓名和信息者勿加入)Q  Q:408365330     E-Mail:egojit@qq.com PE文件结 ...

  9. mybatis高级(1)(入门回顾)

    首先入门案例(并且拿到新增记录当前id) 1.创建mybatis-config.xml文件 <?xml version="1.0" encoding="UTF-8& ...

  10. ASP.NET MVC多表单提交

    多表单提交需要写清路径,以便主程序可以找到 方法一:直接写路径, action="~/Home/other1"   "~"表示从根目录开始 方法2:@using ...