本次结对编程由我和王熹完成,先发图片

结对编程我们之前从没接触过,关于优缺点书上是这样写的:

(1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。

(2)对于开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。

(3)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已被其他人共享。总之,如果运用得当,结对编程能得到更高的投入产出比(Return of Investment)。

具体情况应该分类讨论

若两人技术水平差别不大,则可以进行互相促进,一个人往往会忽略一些细节等,可以通过结对编程提高代码质量,同时,若两人擅长不同的方面,则可以进行更好的沟通和协调,互相取长补短,最终更容易达到较好的效果。

若两人水平差距较大,则一方面水平较高的人可以通过将军自己的思路帮助水平较低的人学习,而自己也能在讲述过程中发现设计的不足。

此外,对于工作效率的问题也是两方面的,两个人一起虽然可以减少单人容易走神等问题,但如果两人都比较爱玩,也容易同时转移话题,这样反而影响工作效率,而且很多人习惯独自工作,在他人在旁时可能提高效率,但也可能降低质量。

没有一个方法是通用和完美的,结对编程同样有很多不足

首先双方需要约定时间,不是很自由,容易耽误时间。

同样过程中很可能因为某一问题产生争执,或不赞同他人的编程习惯,设计方法等,若不能及时解决冲突,将会影响工作进程。

关于设计方法:信息隐藏,接口定义,松耦合。

这次的框架是这方面的很好的范例,下面进行一些分析

Information Hiding:In computer science, information hiding is the principle of segregation of the design decisions in a computer program that are most likely to change, thus protecting other parts of the program from extensive modification if the design decision is changed. The protection involves providing a stable interface which protects the remainder of the program from the implementation (the details that are most likely to change).

这次的电梯中的乘客,Schedular没有得到关于乘客的任何信息,关于乘客的方向,以及请求时间,乘客姓名以及体重等都没有提供给电梯调度模块,而且乘客也不由电梯调度程序控制,乘客与电梯相关的信息都被封装为Request发送给Scheduler,这是符合实际的。同时Scheduler由类厂初始化,Program类也无需知道Scheduler的具体实现。

Interface Design:

接口即是具体实现的抽象,可以方便的根据需要修改一部分的具体实现而无需修改接口,接口只定义了功能,是一个标准。实际过程中这也是非常常用的,上次的Individual Project中我们使用的ICompare接口就是一个常见的例子,.net框架定义了这个接口,用于比较两个元素,而默认的排序比较算法只并不知道具体的数据是什么样的,但是对于具体的数据,只要实现这一接口,就能用默认的算法进行排序,代码复用程度大大提高。本次作业框架中包括电梯,乘客等都定义为接口,而电梯的一些其他数据也进行了封装,这样可以方便的修改实现而无需修改接口。

Loose coupling:

In computing and systems design a loosely coupled system is one in which each of its components has, or makes use of, little or no knowledge of the definitions of other separate components. The notion was introduced into organizational studies by Karl Weick. Sub-areas include the coupling of classes, interfaces, data, and services.即一个类对其他组件知道的越少越好,否则依赖项过多系统很难维护和重用。这里的类厂又是松耦合的一个很不错的示例以及各种的接口设计都是这样的思路。scheduler不关心具体的Elevator和Request的内容,甚至也不知道有passenger类,同样主程序也不关心具体的scheduler实现,这使得每个部分的独立性更强,更易维护。

Design by Contract:

优点:分开工作,每个开发人员只需关注自己所需实现的部分符合定义的规则,无需进行复杂的考虑。

缺点:要求接口必须先设计完整,否则后期发现用户需求改变需要更改接口时将非常麻烦。

UML图通过反向提取模型实现:

算法描述:

基本采用正常电梯的算法,分为以下几种情况:

若电梯为空且没有请求产生,若存在最近的一个楼层总请求数为每层平均请求数的两倍,即该楼层的请求概率大,则移动至该楼层,否则状态不变。

否则若当前停止且有外部方向请求,此时分两种情况,若当前层有请求则改变相应方向使乘客上电梯,否则找到同方向请求中的最短距离的请求并前进至该层。

若电梯正在运行中,则在同方向上找到内部乘客楼层请求和外部同方向请求的最小楼层,若电梯已满则不考虑外部请求,如果都没有,则寻找外部反方向请求并到达该层,若反方向请求也不存在,则电梯在最近的一层停止。

每次讲保存总请求数和各层请求数。

算法改进:由于要求平均时间最短,则可以在电梯在某一状态时进行估值,判断下一个行进方向,估值函数综合考虑请求数,方向和距离,这样在两边都有反向请求时若请求多的方向和电梯行进方向相反,也可能得到多个会得到更大的权重,这时电梯可放弃当前方向转而向权重大的方向前进。

转载于:https://www.cnblogs.com/SuperBrothers/archive/2012/10/24/2737923.html

PAIR PROJECT 总结 PART1 --韦昀相关推荐

  1. G4Sui老师的pair project(197)

    在做的云里雾里的individual project之后,这次的pair project让我开始找到了一下软件工程的感觉!其中原因除了C#能稍微捯饬明白了,还有就是合作的力量. 本次结对编程进程: 1 ...

  2. Pair Project: API设计 by Xiao Li and Yishi Xing

    Pair Project API设计 本次 Pair Project 的内容是设计一个电梯调度系统. 我们认为一套完整的电梯调度系统应该包括以下三个类: (1)      乘客类 (2)      电 ...

  3. Pair Project:电梯控制程序 编写心得 最新版

    (之前不知道这个博客两个人都要写完整的,所以现在补全) 小组:王安然:10061210 李斌:10061150 在这两个星期之中,我与李斌二人组成了一个小组,完成了Pair Project--电梯控制 ...

  4. Pair project(刘昊岩11061156 黄明源11061186)

    Pair project members:刘昊岩11061156,黄明源11061186 两周时间,工程下午刚刚结束,现做一些总结. 在现有工程基础上修改schedule 包下方法,主要思想是,也就是 ...

  5. 电梯调度算法 软工 Pair Project

    软工要求的结对编程,随机分组,然后,我(郭立轩)和六班的闫生辉分在了同一组.之前并不认识,虽然如此,这次结对编程的经历还是相当愉快的,也学到了不少东西. OK,下面进入正文 关于结对编程 如何利用结对 ...

  6. Pair Project: Elevator Scheduler Report By Hu Renjun

    0.结对人员 Hu(155) Tan(189) 1.关于结对编程 优点:coder的大部分错误可以在第一时间被reviewer发现,这省下了很多本应当在项目测试阶段花费的时间:   结对编程写出的每一 ...

  7. 【转自lzplzp】pair project总结

    pairproject总结和结果 自从1.2后还有几次修改代码的历程 修改的2.0版本: 主要是针对状态机的优化 Idle 遍历当前请求楼层,如果有楼层,则跑过去. 如果该楼层的请求是destinat ...

  8. Pair Project

    第二次作业的结对编程项目:电梯调度系统 结对编程小组成员:吴煜10061149    全风楠10061186 这次的作业与个人项目不同,不是从头写一个新的程序,而是在一个已有的程序之上做修改然后实现新 ...

  9. 现代软件工程 结对编程 (I) 三维棋类游戏

    Pair Project I 3D Board Game Turn a usual 2D board game into 3D by transferring  board and game rule ...

最新文章

  1. Java爬虫--json数据处理:JSONObject的使用
  2. C#中在定义事件委托时怎样跨窗体传递参数
  3. 面试官系统精讲Java源码及大厂真题 - 06 LinkedList 源码解析
  4. node 常用的一些终端的命令的快捷键
  5. extjs5(03--项目中文件的加载过程)
  6. 六年不惑:开发人员的“僵难Style”
  7. 2019最新 Java商城秒杀系统的设计与实战视频教程(SpringBoot版)_1-4系统的整体演示...
  8. 【Java练习题】Java 程序的输出 | 第十一套(含解析)
  9. Windows提权实战——————1、IIS6.exe提权实战
  10. android dagger2 讲解,用Dagger2在Android中实现依赖注入
  11. spring之aop(前置通知,后置通知,环绕通知,过滤通知,异常通知)
  12. 人工智能最全学习路线
  13. [翻译练习] Node interview of ElemeFE OS
  14. Java面试题(九)-----编写程序实现判断E: / 根目录下是否有后缀名为.jpg的文件,如果有则输出文件名称
  15. 关于Map线程安全的几种实现方案
  16. 郑明秋什么版本的MySQL_《MySQL数据库实用教程》郑明秋,蒙连超,赵海侠著【摘要 书评 在线阅读】-苏宁易购图书...
  17. 一个软件测试工程师的学习体验
  18. pcf8563 C语言编程
  19. 学深度学习已经可以有这么多选择,是时候出份书单了
  20. 微信小程序(看文档写实例二)微信小程序课堂宝APP

热门文章

  1. 大厂里如何看待合作这件事
  2. SAPIEN PrimalSQL 2023.1[x64] Crack
  3. 根据数据库表结构生成Excel表设计——源码设计说明
  4. 10、次季节-季节(S2S)预测数据简介
  5. 声音震动专用-24位动态信号高精度数据采集卡
  6. SSH与CCES结合生成LDR中文教程
  7. 基于selenium实现12306模拟登陆
  8. python做泰勒展开_python中的泰勒展开-问答-阿里云开发者社区-阿里云
  9. [TKDE 2021] Self-propagation Graph Neural Network for Recommendation
  10. win7不能安装adobe pdf打印机的解决方案