结对项目:电梯调度算法的实现和测试——报告

一、编程人员

  徐方宇、陈少杰

二、工作照片

三、结对编程优缺点

  优点:

  1. 程序员互相帮助,互相教对方,可以得到能力上的互补。

  2. 可以让编程环境有效地贯彻Design。

  3. 增强代码和产品质量,并有效的减少BUG。

  4. 降低学习成本。一边编程,一边共享知识和经验,有效地在实践中进行学习。

  5. 在编程中,相互讨论,可能更快更有效地解决问题。

缺点:

  1. 对于有不同习惯的编程人员,可以在起工作会产生麻烦,甚至矛盾。
  2. 两个人在一起工作可能会出现工作精力不能集中的情况。程序员可能会交谈一些与工作无关的事情,反而分散注意力,导致效率比单人更为低下。
  3. 面对新手,有经验的老手可能会觉得非常的烦躁。不合适的沟通会导到团队的不和谐。

四、组员各自的优缺点

  1. 徐方宇:编程能力、阅读和分析代码能力强,有耐心,为人友善。有时注意力会被游戏吸引过去。
  2. 陈少杰:与队友相处和睦,细心,编程能力较好。代码的分析能力较弱。

五、利用这些好的设计方法

  1.Jnformation Hiding

  信息隐藏是结构化设计和面向对象设计的一种很好的方法。的可以让我们在调用一些方法的时候,不必关心这个方法的内部是怎么实现的,只需要了解怎样使用即可。这样可以减少代码量,并降低编程难度。

  在这个电梯的调度程序中,我们可以把一个功能用一个方法实现,在需要该功能的地方调用该方法既可。比如在passenger类中定义EnterElevator、LeaveElevator方法来实现一个乘客进入电梯、离开电梯的过程,在需要完成这一过程的时候,只需要调用这一方法即可,不必考虑这个方法的实现方式。

  2.Interface Design:

  接口实际应符合六大原则:单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。

在电梯调度程序中,我们把IElevator、IPassenger等设计为接口,在实现该接口之后,传递数据可以以接口中的数据来进行,方便方法的实现。

  3. Loose Coupling:

  松耦合的目标是最小化依赖,即功能函数之间,依赖程度尽量不要太高,能让编程者不至于对一个函数修改之后,使得其他函数跟着它一起修改很多。

六、Design by Contract、Code Contract

  契约式设计要求软件设计者为软件组件定义正式的,精确的并且可验证的接口,这样,为传统的抽象数据类型又增加了先验条件、后验条件和不变式。它把类和它的客户程序之间的关系看作正式的协议,描述双方的权利和义务。

  优点:契约式设计可以获得更优秀的设计,提高程序可靠性,帮助调试,并能支持复用。代码契约则可以通过契约来设计,能显著地减少软件中的潜在缺陷。

  缺点:个人感觉,契约式设计不利于编程过程中融入编程者的新想法——在契约确定之后,就要严格的按要求进行设计,即便有更好的设计,也不能随意对原设计进行修改。

七、UML图

  

八、算法

  在这次程序的编写中,我们把电梯只知道梯内人数,梯内重量当做前提条件,这样和现实情况比较符合.

  在考虑电梯调度算法时,我们发现这样一个问题:当很多人都在某电梯内时,电梯再进入一个人就要花费梯内每个人一段等待开关电梯门的时间,造成较多的时间的消耗,所以当调度电梯时,我们优先考虑人少的,重量,人数有余地的, 运行方向和叫梯方向相同且能顺的上路的电梯去完成叫梯请求.

  在这种请求的分配方式之下,电梯在当前运动方向上运行,只在有梯内外请求的楼层停靠,完成当前运行方向所有的请求后,就掉转方向继续完成另一个方向的请求.

九、结果分析

  电梯调度程序的编写并不算顺利,在编写完程序后,passenger1的测试顺利地通过了,可是passenger2中存在死循环.经过调试后,虽然跳出了passenger2的死循环,但是调度效率很低, 之后又陷入了Passenger3测试的死循环,调试了很久终于又跳出来了.

  经过分析,我们认为导致程序运行效果不好的原因如下:

  1. 调度算法不够细致.可能太过注重电梯人数少这个条件,导致电梯运行时可能会牺牲较近的电梯选择而去选择十分远的电梯,而且一直将指令分配给人数最少的可执行电梯也可能造成指令分配的混乱,增加不必要的路程.
  2. 思路与电梯程序的基本框架有所矛盾.在编写程序的过程中,为了能满足调度算法的逻辑,我们挪动了部分代码所在的文件,而且覆盖了一部分代码原本的逻辑,这些做法无疑都十分危险,会增加很多意想不到的麻烦.
  3. C#知识的欠缺,读代码能力不足.说来惭愧,这又是我们第一次用C#来编程序,我们对C#这门语言的理解很薄弱,这次作业需要阅读的代码量也不算少,虽然我们花费了近两天的时间去读代码,可是还是不能做到理解透彻,否则思路也不会和程序的基本框架出现矛盾.
  4. 代码不工整,编写习惯不好. 编写的过程中,有时都会分不清括号的对应情况,而且每行代码的退格也不整齐,增加理解上的困难;有时会临时想到在某个地方再添加逻辑判断之类的语句,于是只能临时在作用的代码段的前后添加,格式又变得更混乱;编写多层嵌套的习惯也让算法的实现变得麻烦又易错.

十、感想

  这次调度算法的编写,与其说是学习编程,不如说是一个反省的过程.在编写的过程中,真的发现了自身存在的很多问题,这些问题之前其实一直都在,只是没有引发真正的麻烦。当我们面对更深入的学习任务时,它们就会限制我们的能力,降低效率。通过这次作业能发现这么多自身的问题,我们感到十分庆幸。

时间: 2024-12-05 00:14:01

结对项目:电梯调度算法的实现和测试——报告的相关文章

结对项目:电梯调度算法的实现与测试

结对编程人员:12061174 李靖 12061167 林旭鹏 文件位于TFS上的Pairproject11中 算法核心:两个关键---1.history direction变量 2电梯里面有没有人. 电梯初始的方向默认为向上,在每个tick时间点 电梯如果在底层,history direction为上,如果在顶层则为下. 电梯内没有人的时候,先遍历请求,如果有方向一致并且可以去到的楼层请求,则Reqstopat最近的. 若当前History dirction方向上,没有方向一致的楼层请求,则检

结对编程--电梯调度算法

1.需求分析: 实现电梯调度算法,预先输入乘坐电梯人数.每个人的起始楼层和到达楼层以及当前电梯所在楼层,电梯会根据算法依次将所有人员接入电梯并送至其重点楼层. 2.代码截图 3.约定的规范 使用Tab制表符 每行不超过100 {}另起一行 规范示例: 4.记录时间 命题讨论:1h 思路分析:1h 代码编写:24h 程序测试:2h 博客记录:1h 5.心得体会 结对编程可以通过自己的parterner来发现自己之前的不足,矫正错误 通过电梯调度算法,复习了数据结构和C语言的指针,结构体等

结对作业——电梯调度算法的实现与测试之需求分析与算法设计

结队成员:李宝全 & 黄一凡 李保全的博客首页:http://www.cnblogs.com/libaoquan/ cooding链接:https://coding.net/u/2013040101159/p/4elevator/git 4路电梯调度算法展示:http://ele.libq.ren/ 结对编程题目:电梯调度 现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示: 电梯编号 可服务楼层 最大乘客数量 最大载重量 1 全部楼层 10 800KG 2 单层 10 8

结对项目电梯吐血总结

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

结对项目:电梯调度算法的实现和测试

结对编程人员: 12061167林旭鹏 12061174李靖 TFS上Pairproject11 结对编程优点: (1)结对编程相对来说比较高效,一些基本功能可以分开来写unit在进行整合,核心算法可以进行讨论,选择效率比较好的哪一种算法. (2)两个人同时进行编程,不容易分神,集中程度相对一个人时更高,双方也可以互相监督.并且若有一个人实时对另一个人的代码进行实时监督,可以避免手滑打出来的小问题,这些小问题在调试时时很难找出来的,可以节约调试的时间.而且debug时,也可以让头脑比较清醒的人上

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

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

Pair Work:电梯调度算法的实现和测试 by 12061171 and 12061168

结队成员简介: 成员:牛强,学号12061171:刘文乔,学号120611683 我们之所以结对编程以完成所给课设要求,是因为我们互相了解彼此,能够更好更快地完成.下图是我们合作编程时的留影: 牛强是一个思维活跃.工作积极,编程基础较强的人,但是他经常忽略一些细节问 题,导致他经常花费更多的时间用于代码的调试和改错:而刘文乔是一个考虑问题比较全面的人,可以较快地分析出问题所在,并能快速改正,但是编程能力较弱,在完成已分配任务时花的时间会比较多.而我们组成一个队伍,互补互助,不仅能够更好更快地完成

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

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

挑战--电梯调度算法的实现和测试