结对编程人员:张迎春,赵梓皓。下面是我们一起编程的照片。

  结对编程的优点:

  首先,结对编程的目的是为了减少编程的错误,在编程的时候,大家一起检查错误,一起分析有没有更加合理的编写方法,所以这是结对编程的第一个优点。第二个优点是两个人可以交流思想,可以一起探讨更加好的算法,提高算法的质量。而且两个人可以交替编写程序,将任务分散,更高效的利用时间。

  缺点:

  结对编程的缺点是开始时两个人需要一定的磨合期,需要在程序编写前知道对方的编写习惯,并且尽量先统一一下编写的格式,命名的方式等,不想一个人编程那样随意。其次结对编程时,当一个人做出修改时,必须要写好完整的注释,让对方知道自己程序的含义。最后结对编程要解决两个人的分工问题,合理的分配工作的每个环节。

  程序的好设计方法:

  信息的隐藏,或者说是程序的封装性,这是为了保证程序的安全性,保证程序的内部信息不会被随便的获得和改写,这使得程序变得更加具有独立性,高内聚,面向对象的特征更加明显,为了保证这一点,我们在程序中对一些需要被外部访问的属性设定了专门的方法,通过方法的方式将内部属性传递出去。

   接口的设计。接口的设计在一定程度上决定了继承该接口的类的功能。传递数据信息是接口的一个比较重要功能,通过接口完成相互独立的模块之间的信息传递,很好的保护了程序的封装性。

  程序模块间的低耦合性。这使得程序之间的联系尽可能的少,不再会“牵一发而动全身”。低耦合性使得程序的维护变得简单,某个程序更改后,其他的程序只需要做很小的修改,甚至不需要修改就可以使用。

  关于契约式编程:

  契约式编程可以减少软件开发的成本,要求软件设计者为软件组件定义正式的,精确的并且可验证的接口,这样,为传统的抽象数据类型又增加了先验条件、后验条件和不变式。契约式编程就是函数调用者应该保证传入函数的参数是符合函数的要求,如果不符合函数要求,函数将拒绝继续执行。按照契约式编程的思想编写代码,就要求我们写函数时检查函数参数。契约式编程使得软件开发的分工更加合理,加强了开发的安全性,降低了开发的困难程度。

  Unite test结果如下

  

  我们对绝大多数的方法进行了全方面的测试(主要是后来我们修改过或者自行添加的函数,一些get和单纯的传递属性的函数没有进行测试,因为意义不大)。

  UML截图如下,我们选取了该程序中主要的五个类做出了UML图,以便于更加清晰的反映各个类之间的关系。主要有电梯类,调度类,乘客类,请求类,调度规划类。具体如下。

  

  我们的算法:

  由于实现实时分配调度任务比较困难,所以我们采用了及时分配的策略。具体如下:

  我们更改了程序的接口,放弃了原来的调度队列,并将其分解为四个独立的调度队列,分别对应于四个电梯。当有一个乘客发出方向请求时,我们会根据电梯当前的状态计算出电梯来接这位乘客的花费(包括到该层的时间和电梯中原有的乘客要在这层等待的时间花费),选择当前花费最小的电梯,将该请求加入到这部电梯的调度队列之中。如果所有的电梯调度花费都是无穷大(比如电梯当前不顺路或者电梯根本无法到达该层),那么这个乘客的请求将会被搁置,直到某个时刻有电梯到该层的花费不是无穷大,由该电梯来接受请求。对于电梯去接乘客,但是发现乘客要求去得楼层电梯不能够到达时,乘客不会进入电梯。该乘客将再次发出请求(实际情况也是这样),并且乘客会记住这个电梯,对这个不能到达目的地的电梯进行标记,从其他的电梯中进行选择。为了优化上下班高峰期的情况,我们对电梯的请求队列内的请求数进行了优化。当该电梯的请求过多时,电梯便不会再接受请求,这样一方面减少了乘客们等待的时间,另一方面也是的请求尽量分配到多个电梯,使电梯的调度分配更加合理。还有就是一些小的细节上的优化,比如电梯不会接受在自己的最高层发出的向上的请求,不会接受在自己的最底层发出的向下的请求等等。

PairProject 总结的更多相关文章

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

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

  2. 软件工程——PairProject

    结对编程组员: 马辰     11061178 柴泽华  11061153 1)    照至少一张照片, 展现两人在一起合作编程的情况. 结对编程的优点 1)在编程过程中,任何一段代码都不断地复审,同 ...

  3. Pairproject 移山之道 阅读随笔和一些问题

    首先不得不承认这本书的写作方式很独特,不像其他的计算机类的图书那样枯燥,让人读起来感觉很有意思,他也颠覆了我对计算机类图书的看法,这种写作方式值得我们学习. 先谈谈收获吧.读了两年大学,这是第一次写类 ...

  4. PairProject——结对编程

    成员:12061162  王骜 12061225  钟毅恒 一.合作过程中的照片 . 二.结对编程的优缺点 优点: 1)在编程过程中,任何一段代码都不断地复审,同时避免了将写代码的责任抛给一个人的问题 ...

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

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

随机推荐

  1. 【PAT】B1068 万绿丛中一点红(20 分)

    一开始因为看见这题就头疼,可费了点时间. 要考虑所有元素,如果忽略外圈元素,最后一个样例过不去. 而且要求只出现一次的元素, 我没有使用map,因为当时还没学,用map储存元素会节约好多代码 #inc ...

  2. 记录线上一次线程hang住问题

    线上发现执行某特定任务在某个特定时间点后不再work.该任务由线程池中线程执行定时周期性调度,根据日志查看无任何异常.从代码研判应该无关定时任务框架,因为对提交的定时任务做了wrap,会将异常都cat ...

  3. Android 怎样开启与关闭adb 的认证机制(google adb secure) (adb RSA 指纹认证)

    前言         欢迎大家我分享和推荐好用的代码段~~声明         欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net           ...

  4. NPM(包管理器)作用是什么?

    NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: a.允许用户从NPM服务器下载别人编写的第三方包到本地使用 b.允许用户从NPM服务器 ...

  5. Android集成讯飞语音、百度语音、阿里语音识别

    项目实践:https://blog.csdn.net/Jsagacity/article/details/80094164 demo下载地址:https://fir.im/jy28 demo源码:ht ...

  6. oracle dataguard主从切换

    前言: 众所周知DataGuard一般的切换分成两种,一种是系统正常的情况下的切换这种方式为:switchover是无损切换,不会丢失数据:另外一种方式属于灾难情况下的切换,这种情况下一般主库已经启动 ...

  7. nodejs中引用其他js文件中的函数

    基本语句 require('js文件路径'); 使用方法 举个例子,在同一个目录下,有app.fun1.fun2三个js文件. 1. app.js var fun1 = require('./fun1 ...

  8. 乐观锁与悲观锁以及乐观锁的一种实现方式-CAS

    首先介绍一些乐观锁与悲观锁: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁.传统的关系型数据库里边就用到了很 ...

  9. mysql 数据库表备份和还原

    #!/bin/bash #ip地址 HOST=localhost #用户名 USER=claim #密码 PASSWORD=Pw123456! #数据库名称 DATABASE=claim_oauth2 ...

  10. 分布式计算(三)Azkaban介绍

    转载自:Azkaban学习之路 (一)Azkaban的基础介绍 目录 一.为什么需要工作流调度器 二.工作流调度实现方式 三.常见工作流调度系统 四.各种调度工具对比 五.Azkaban 与 Oozi ...