一.结对编程人员:

   张艺(学号后三位:185) 杨伊(学号后三位:151)

二.这是我们工作的样子:(图片)

三.结对编程优缺点:

    优点:

    1.结对编程时间紧密,在一定程度上可以督促双方学习,提高效率。

   2.Coder在coding过程中会遇到一些细小的问题,而reviewer可以及时指出错误,并给予解决方案进行讨论。

   3.遇到问题时,两个人一起讨论,并补充对方没有想到的地方,是完善程序最好的方式。

   缺点:

   在编程过程中,很长时间是coder在coding的过程中想思路,大概这也是每个程序员的特点,而这个时候reviewer就会长时间遇到空档期。

四.组员各自的优缺点:

      1.张艺:编程能力强,思路清晰,实践能力强。但是特别容易被动漫带跑。

   2.杨伊:学习态度不错,有耐心,较专心。动手能力弱。

五.说明怎样利用好的设计方法:

    1.Information Hiding:信息隐藏是结构化设计与面向对象设计的基础。在结构化中函数的概念和面向对象的封装思想都来源于信息隐藏。软件业对这个原则的认同也是最近十年的事情。
        以下列举了一些信息隐藏原则的应用。
        (1) 多层设计中的层与层之间加入接口层;
        (2) 所有类与类之间都通过接口类访问; 
        (3) 类的所有数据成员都是private,所有访问都是通过访问函数实现的;

     信息隐藏机制在本次编程作业中是十分有必要的,乘客乘坐电梯只需知道电梯外按钮代表的含义即可,而电梯的运行机制是没有必要让乘客知道的。而程序中体现这一点的是使用private关键字实现类的封装。

       2.Interface Design:接口的有七个特性,分别是:稳定性,易用性,规范性,可移植性,鲁棒性,安全性和兼容性.而稳定性和易用性是设计接口时最基本的特性,接口必须相对稳定,否则将导致接口的使用者和提供者为了适应新接口而不断修改接口的实现,可能重复进行无用功,严重时影响整个软件开发进度。

       3.Loose Coupling:耦合性是指组件(函数)之间相互依赖的程度,而松耦合是指功能函数之间,尽量依赖程度不要太高。否则,修改完一个底层函数后,会对多个上层函数,进行大量的测试。

六.Design by Contract:契约式设计要求软件设计者为软件组件定义正式的,精确的并且可验证的接口,这样,为传统的抽象数据类型又增加了先验条件、后验条件和不变式。这种方法的名字里用到的“契约”,或者说“契约”是一种比喻,因为它和商业契约的情况有点类似。契约式设计的核心思想是对软件系统中的元素之间相互合作以及“责任”与“义务”的比喻。这种比喻从商业活动中“客户”与“供应商”达成“契约”而得来。

七.Unit Test:

以下是我们针对Scheduler类编写的单元测试(部分截图),从截图的右边可以看到所有方法均通过了测试:

以下是单元测试的代码覆盖率:

可见单元测试对整个程序的覆盖率是较低的,但由于我们是针对Scheduler类做的测试,因此我们点开Scheduler.dll,看看单元测试对该类的覆盖情况:

可见覆盖率达到了80%以上。

八.UML图:

九.算法关键以及独到之处:

算法的实现分为两个阶段:原始阶段优化阶段

A.原始阶段

该算法的实现有一个前提,即乘客较为机智,在进入电梯时不会进入无法到达自己目标的电梯。
实现算法前需要为每一个电梯设置一个任务列表,为调度器设置一个总任务列表。API中将请求分为DirectionReq和DestinationReq两种,下文分别以方向请求和目的地请求简称。
算法实现如下:
调度器:
1.为符合条件(请求时间与当前时间一致)的方向请求生成请求,并将其加入调度器的任务列表。
2.每个tick调度器进行调度,分为以下两步完成:
 (1).为方向请求安排电梯。选择可达请求源楼层且距离源楼层最近且方向顺路或停机且没有被乘客拒绝过的电梯,将该请求入该电梯的任务列表。在调度器的任务列表中将该请求标记为已分配。
 (2).根据电梯的运行方向对每个电梯的任务列表进行排序,若上行则从小到大,下行则从大到小。删除目标层为本层的请求。检查电梯的任务表,如为空说明电梯目前已无任务,设置电梯为停机状态。否则,设置电梯的历史方向,并将任务表中第一个任务的目标楼层作为下一次电梯停靠位置。

乘客的选择策略:
1.乘客因两种可能原因导致无法进入电梯:
 (1).超重或超过人数。若如此,通知调度器重新激活任务列表中的该任务,使其可被重新安排。
 (2).电梯无法到达乘客指定楼层。若如此,将该电梯加入乘客的拒绝列表重新激活任务列表中的该任务,使其可被重新安排。
2.乘客若进入电梯,则该电梯一定可将乘客送达;将调度器中的该请求删除之。
3.乘客离开电梯与原API相同,不做改变。

算法独到之处在于考虑到了顺路策略,以及在安排电梯时尽量调度离乘客近的电梯。如果该电梯不能将乘客运载到乘客想要到的目的地,则对于该请求,这个电梯是被拒绝的,以后也不会为该乘客安排这个电梯。然后再为其调度其他的电梯,这也是和现实生活接近的。

B.优化阶段
在算法优化阶段,我们考虑增加乘客的智慧,使其能根据当前来的电梯更改自己的目的地,将临时目的地设置为电梯所能运载到的最远楼层。然后再转乘其他电梯,这样可以提高电梯的利用率。
经过优化后,平均耗时相比原始阶段有了大幅提高。

十.感想:这是我的第一次结对编程,以往编程作业都是自己想算法,自己上网查资料学习语言。但是这次结对编程,和同伴一起讨论算法,并解决算法中的问题是我从未有过的体验。虽然我们在共同编程这一点上做的不是很好,很大一部分时间都是一个人在敲代码,配合还需要进一步的磨合。但是我们从这种学习的方式中学到了很多。

pair work结对编程(张艺 杨伊)的更多相关文章

  1. pair work 附加题解法(张艺 杨伊)

    1.改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享,目前的设计有什么缺点, 你会如何改进它? 目前的缺点: (1)电梯由于载客重量不 ...

  2. 20175305张天钰Java结对编程四则运算(二)

    Java结对编程四则运算(二) 一.题目描述及要求 Git提交粒度不要太粗,建议一个文件/一个类/一个函数/一个功能/一个bug修复都进行提交,不能一天提交一次,更不能一周一次,参考Commit Me ...

  3. 20175305张天钰Java结对编程四则运算

    Java结对编程四则运算 一.题目描述:如何对表达式进行求值运算呢 1.中缀表达式与后缀表达式(娄老师讲解) 中缀表达式就是运算符号在运算数中间的表达式,比如1+2,顾名思义,后缀表达式就是运算符在运 ...

  4. 2017-2018-2 1723《程序设计与数据结构》第九周作业 & 第二周结对编程 总结

    作业地址 第九次作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1878 (作业界面已评分,可随时查看,如果对自己的评分有意 ...

  5. 2017-2018-2 20172323 『Java程序设计』课程 结对编程练习_四则运算 2

    相关过程截图 关键代码解释 将运算式分开的代码 String[] result = num.split("\\s"); 将输入的num以空格为间隔符号分开,将每一个间隔开的字符存入 ...

  6. 结对编程-地铁续(有种上个学期OO的既视感)

    我们组比较特殊..三人结对 github:https://github.com/qingchanghan/WPFUI_Metro po一张照片: 石浩然,韩青长.陈彦吉 (台式机真的很高端,分屏贼帅) ...

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

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

  8. 结对编程—黄金点游戏WinForm单机版

    本小游戏场景来自邹欣老师的<移山之道>一书: "阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫"黄金点"的游戏: ...

  9. Week4 结对编程

    1.照片 1.1  结对编程参与者:李文涛.黎柏文 1.2  展示照片 2.结对编程的优点&缺点 2.1 优点 2.1.1.两人分工合作,减少了工作量 2.1.2.结对编程的伙伴往往能提供不同 ...

随机推荐

  1. Linux-lvm逻辑卷管理和提示丢失pv物理卷

    问题描述: 有次在使用lvm扩容的时候,整错了,导致显示如下情况 提示缺少一个pv导致无法继续,pvdisplay的时候查看到unknown 使用pvs查看找到pvname的unknown对应群组ce ...

  2. 转:tcpdump抓包分析(强烈推荐)

    转自:https://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666539134&idx=1&sn=5166f0aac71 ...

  3. asp.net mvc项目使用spring.net发布到IIS后,在访问提示错误 Could not load type from string value 'DALMsSql.DBSessionFactory,DALMsSql'.

    asp.net mvc项目使用spring.net发布到IIS后,在访问提示错误 Could not load type from string value 'DALMsSql.DBSessionFa ...

  4. arcgis api for javascript中使用proxy.jsp

    当我们使用arcgis api for javascript 查询arcgis服务时,如果查询的参数很长时,通过get方式提交会查询不到结果,因为get方式提交的参数有长度限制,需要通过代理的方式使用 ...

  5. WPFのBorder的用法

    border介绍: 下面是StackPanel中,一个简单的,具有轻微圆角的边框,围绕在一组按钮外面: <Border Margin="5" Padding="5& ...

  6. (8)Python判断结构

  7. read_csv报错Initializing from file failed

    Python版本:Python 3.6 pandas.read_csv() 报错 OSError: Initializing from file failed,一般由两种情况引起:一种是函数参数为路径 ...

  8. RESTful API实战笔记(接口设计及Java后端实现)

    写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...

  9. KVM虚拟化图

  10. PAT A1141 PAT Ranking of Institutions (25 分)——排序,结构体初始化

    After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...