结对项目:电梯

结对编程:

结对编程的优缺点:

优点:

1.相互督促,共同为了完成目标而努力;

2.节省时间,通过将疑难问题分开解决,共同讨论,实现了更高效的时间利用率;

3.能力互补,提高代码的质量,同时也提高了测试代码的效率,容易发挥每个人自身的优点;

缺点:

1.可能会形成互相依赖的情况,都等着对方积极主动,容易把时间拖到最后;

2.对于思维方式和行为习惯不同的人来说,往往在交流的时候可能会有一些障碍,甚至产生一些小矛盾,编写代码的效率反而可能会比单独更低;

3.如果双方编程能力都不强的话可能很难形成真正意义上的互补;

结对伙伴的优缺点:

黄敬博同学的思维非常活跃,理解能力和编程能力较强,只是做事有一点拖延;

黄伟龙同学基础较弱,较勤奋,但是思维不是很灵活,理解问题较慢;

合作流程:

1.共同阅读理解代码,找到其中的着眼点,每个人说出自己的想法;

2.上网搜寻电梯相关的算法,并且经过相互讨论确定方案;

3.共同编写代码;

4.进行调试;

Information Hiding

信息隐藏指的是在设计模块时将某些特定的信息,包括属性或方法隐藏起来,对于不需要这些信息的其他类来说是不可访问的。信息隐藏提高了数据的安全性,避免了信息在无关的其他地方被非法更改,也有益于程序模块化的设计。

Interface Design

接口设计,简单来说接口就是一种模板或者契约,只规定了需要功能,而不去关心具体的细节;通过灵活使用接口,可以增加代码的生命力和可移植性。

Loose Coupling

耦合指的是一个元素对另一元素的直接了解程度。松散耦合是在一个系统中使各组件互相连接的方法,使这些模块在最小的可行范围内彼此依赖。松耦合架构可以降低整体复杂性和依赖性,每个模块具有各自的独立性,仅通过消息来传递信息,修改其中的某个模块并不会对其他模块造成破坏,方便我们对不同的模块的修改和管理。

Design by Contract

契约式编程

契约式设计是一种设计计算机软件的方法。这种方法要求软件设计者为软件组件定义正式的,精确的并且可验证的接口,这样,为传统的抽象数据类型又增加了先验条件、后验条件和不变式。其中前置条件指的是为了调用函数,必须为真的条件,在其违反时,函数决不调用,传递好数据时调用者的责任;后置条件指的是函数保证能做到的事情,函数完成式的状态,函数有这一事实表示它会结束,不会无休止的循环;不变式指的是从调用者的角度来看,该条件总是为真,在函数的内部处理过程中,不变式可以为变,但在函数结束后,控制返回调用者时,不变式必须为真。

优点:

契约能使文档更出色;契约是类特性的公开视图中的固有成分;有着更可靠的文档,运行时要检查断言,以便保证制定的契约与程序的实际运行情况一致;断言定义了测试的预期结果,并且由代码进行维护,使程序有明确的测试指导;既能够获得精确规范得到的益处,同时还使得程序员继续以他们所熟悉的方式工作。

缺点:

断言不能沿着继承层次往下遗传。如果你重新定义了某个具有合约的基类方法,实现该合约的的断言不会被正确调用,你必须手工调类不变式,基本的合约不会主动实现。

Code Contract

程序代码合约是.NET Framework 4.0的新功能,它是微软对契约式编程概念所提出的一种解决方案,主要由前置条件后置条件、与对象不变式这三大契约所构成,可以很容易的为程序代码加入验证程序代码,降低程序的错误发生率,提高程序的质量,也可以整合单元测试,减少单元测试的工作量,甚至整合文档管理器,让产出的程序文件更为详细 。

Unit Test

UML如下,第一张是整体的,第二章比较详细

算法的关键和独到之处:我们的算法来自于博客园的一篇电梯算法总结,我们感觉其中的scan算法和在其基础上改进的look算法比较优秀,于是就采用了这种方法:

扫描算法(SCAN)是一种按照楼层顺序依次服务请求,它让电梯在最底层和最顶层之间连续往返运行,在运行过程中响应处在于电梯运行方向相同的各楼层上的请求。它进行寻找楼层的优化,效率比较高,但它是一个非实时算法。扫描算法较好地解决了电梯移动的问题,在这个算法中,每个电梯响应乘客请求使乘客获得服务的次序是由其发出请求的乘客的位置与当前电梯位置之间的距离来决定的,所有的与电梯运行方向相同的乘客的请求在一次电向上运行或向下运行的过程中完成,免去了电梯频繁的来回移动[2]。

扫描算法的平均响应时间比最短寻找楼层时间优先算法长,但是响应时间方差比最短寻找楼层时间优先算法小,从统计学角度来讲,扫描算法要比最短寻找楼层时间优先算法稳定。

LOOK算法[18]是扫描算法的一种改进。对LOOK算法而言,电梯同样在最底层和最顶层之间运行。但当LOOK算法发现电梯所移动的方向上不再有请求时立即改变运行方向,而扫描算法则需要移动到最底层或者最顶层时才改变运行方向。

我们的算法的关键有2点,一是扫描顺路情况下的最短楼层,二是在当前方向下没有扫描到指令的情况则自动掉头。这样就从每层都停变为在最近的楼层停,节省了不少时间。

时间: 2024-08-24 00:36:16

结对项目:电梯的相关文章

结对项目电梯吐血总结

对于这次编程项目,我只想说对不起,我失败了.只能调试通过第一个测试用例.对于后面两个测试点的高峰超载问题还没调试通过. 下面我只能写写自己的失败感受了: 1.起步较晚. 国庆一个假期的确浪费了许多天,基本是过完再着手写这次的项目. 2.与队友交流很少. 我是后来才发现结对项目附近的人都有组了,然后找了好久才发现邓亚梅没人组队才和她结对的.现在我才明白这没人和她组队的原因.可能是她个人比较腼腆,不善于表达自己的想法,而且男女宿舍不同,接触很少,和她的交流只有那么几次,也只有在qq或短信上交流多点,

结对项目————电梯调度系统

本次作业是结对编程,是在团队项目之前的一个小型项目,旨在考验团队协作能力与锻炼个人编程能力,其实一开始我拿到这个题目还以为是一个很简单的问题,因为觉得电梯的运作方式很“傻瓜”,但是我的队友魏鑫磊(http://www.cnblogs.com/wxl530/)却并不是这么想的,在这里真的要感谢我的队友,磊姐想的太全面了!磊姐想到了这个项目最好应该是软硬件相结合,尤其是一些电梯控制超载,图形显示,传感器肯定是要有硬件实现,经过讨论,我才发现我想的真是太简单了....(差距啊= =)但是由于客观条件不

结对项目——电梯调度之界面粗略规划与设计

在程序运行时要显示一个菜单界面,用于用户的一些操作.分为进入菜单,总控台菜单,以及退出. 在进入菜单里我们主要就是设计模拟电梯运动. 首先先分析下现实中的电梯: 1.在外界每一楼层都能够有选择上下的按钮(最低一层只有上,最高一层只有下) 2.选择方向与电梯的运行方向不同时,只有当电梯状态变成静止时才响应 3.电梯内部有能选择楼层的按钮 4.电梯有限载 设计初想: 1.进入菜单: 在每一层的上下按钮可以直接用button控件,显示的文字是:楼层+上/下:然后通过获取控件上的文本信息的第一个字符来确

实践作业3 结对项目

结对项目 一.实践目的 1.熟悉Java GUI相关类的API. 2.理解并实践事件驱动程序设计中的监听器.监听器方法.监听器适配器接口.   二.实践要求 利用Java GUI的组件类.容器类和辅助类设计所选项目的用户界面,并在深入理解并掌握事件驱动程序设计原理的基础上,实现事件驱动的程序设计.   三.项目需求 所选项目名称:万年历. 项目需求描述,主要指应实现的主要功能. 实现了日历的查询,方便使用.界面主要是由查询输入部分和结果显示部分两部分组成. 查询输入:①一个文本域,用于输入年份.

结对作业--电梯调度

结对编程 结对成员:王长(2011040101179)CODING:https://coding.net/u/smile-wang  高庆阳(2013040101173) 博客:http://www.cnblogs.com/gaoqingyang1994/   CODING:https://coding.net/u/gaoqingyang1994 结对编程的优缺点 在结对编程模式下,一对程序员可以平等的.互补地进行开发工作:他们一起分析,一起设计,一起写测试用例,一起编码,一起做测试...这样在

结对项目之具体实施

电梯不工作时的楼层确认 根据和结对伙伴邹鹏华的讨论,我们决定如果电梯不工作时,1,4号电梯将分别停留在1和21层,而2,3号电梯将分别停留在10,11层这样可以尽量减少乘客的等待时间.电梯位置的初始化在窗体还未创建时完成,用窗体的Load事件,因为在一开始设计窗体时是将所有电梯的位置放在0层,所有电梯的当前楼层都是初始化为0,故要在事件中遍历所有的button控件,控件上的文字是“电梯1,“电梯2”,”电梯3“,”电梯4“的button控件的位置发生改变,用switch...case...语句来

结对项目更新

本周确实对结对项目没投入多少时间,新的需求没进行跟进,应该要被老板扣钱的吧.只针对之前的程序进行了争论和修改,之前的程序在处理除法的时候其实是有缺陷的,我们二人就此展开过讨论,在并没有达成共识的情况下,用各自的方法进行了编程试验,也没有解决问题,最后询问了同学,采用了新的办法,才解决了遗留的问题.

结对项目 - 词频统计Ⅱ

目的与要求 代码复审练习 结对练习 编写单元测试 基于上一个结对项目的结果,读取小文本文件A_Tale_of_Two_Cities.txt 或者 大文本文件Gone_with_the_wind.txt,统计某一指定单词在该文本文件中出现的频率. 命令行格式: 提示符> Myapp.exe -f filename.txt -w word (PS:C++ 程序,Java 程序输出方式类似) 解释: 选项 -f 表示打开某一文件 选项 -w 表示统计其后单词在打开的文件中的频率 详细内容 开发语言:J

结对项目之小游戏编程(斗地主)

一.题目简介    本次的项目是编写一个斗地主的小游戏,实现语言:java:主要完成了GUI设计.计时线程.算法.本次项目的主要目的是对算法的学习.算法分析在心得里面. 技术难点:1.图片的移动    2.计时线程的设定   3.对牌的分割,必须考虑到优先拆分方案,将权值低的拆分方案舍去. 4.在删除的时候遇到问题了,删除不了. 二.结对分工及过程 本次结对项目的成员有两个,张国伟:负责对GUI界面的设计,完成功能:洗牌功能,发牌功能,打牌功能的图片的位移处理,基本打牌的桌面等等. 我主要负责对

结对项目—地铁出行路线规划

结对项目—地铁出行路线规划 我的搭档:陈鸿超 14061216 https://github.com/ChengFR/PairProgramming_SubwayRoute- 会在十一期间发布新版本 结对编程体会: 结对编程的优点: 站在软件开发的角度,两个人共同面对同一台电脑进行开发,无论是效率还是软件质量都要超过一个人进行开发的情况. 对于还处于学习阶段的年轻软件开发者来说,结对编程是一个很好的互相学习的机会 结对编程时动力.责任感更强 结对编程的缺点: 对于我们来说,寻找两个人共同的时间进