结对编程:

结对编程的优缺点:

优点:

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点,一是扫描顺路情况下的最短楼层,二是在当前方向下没有扫描到指令的情况则自动掉头。这样就从每层都停变为在最近的楼层停,节省了不少时间。

pairwork(黄敬博12061156和黄伟龙12061172)的更多相关文章

  1. OI省选算法汇总( 转发黄学长博客 )

    [原文链接] http://hzwer.com/1234.html 注 : 蓝色为已学习算法 , 绿色为不熟练算法 , 灰色为未学习算法 1.1 基本数据结构 1. 数组 2. 链表,双向链表 3. ...

  2. 黄聪:《跟黄聪学WordPress插件开发》

    续<跟黄聪学WordPress主题开发>之后,又一个作品完成!<跟黄聪学Wordpress插件开发>,国内最好的Wordpress插件开发视频教程!! 目录预览: WordPr ...

  3. 黄聪:《跟黄聪学WordPress主题开发》

    又一个作品完成!<跟黄聪学Wordpress主题开发>,国内最好的Wordpress主题模版开发视频教程!! 目录预览: WordPress官方源文件层式结构讲解 WordPress数据库 ...

  4. 201871010118-唐敬博《面向对象程序设计(java)》第一周学习总结

    博文正文开头格式:(3分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/p/11435127.html 这个作业的要求在哪里 https:/ ...

  5. 201871010118-唐敬博《面向对象程序设计(java)》第十一周学习总结

    在博客园撰写博客(随笔),总结10周学习内容,作业格式要求如下: 博文名称:学号-姓名<面向对象程序设计(java)>第十一周学习总结(1分) 博文正文开头格式:(2分) 项目 内容 这个 ...

  6. 唐敬博-201871010118 《面向对象程序设计(java)》第七周学习总结

    在博客园撰写博客(随笔),总结7周实验内容,作业格式要求如下: 博文名称:学号-姓名<面向对象程序设计(java)>第七周学习总结(1分) 博文正文开头格式:(2分) 项目 内容 这个作业 ...

  7. 唐敬博-201871010118 《面向对象程序设计(java)》第六、七周学习总结

    在博客园撰写博客(随笔),总结6-7周学习内容(包括实验内容),作业格式要求如下: 博文名称:学号-姓名<面向对象程序设计(java)>第四周学习总结(1分) 博文正文开头格式:(2分) ...

  8. 201871010118-唐敬博《面向对象程序设计(java)》第十六周学习总结

    博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 <https://www.cnblogs.com/nwnu-daizh/> 这个作业的要求在哪里 <https://ww ...

  9. 201871010118-唐敬博 《面向对象程序设计(java)》第十五周学习总结

    博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 <https://www.cnblogs.com/nwnu-daizh/> 这个作业的要求在哪里 <https://ww ...

随机推荐

  1. Linux内存调试工具初探-MEMWATCH(转)

    C 语言作为 Linux 系统上标准的编程语言给予了我们对动态内存分配很大的控制权.这种自由可能会导致严重的内存管理问题,可能导致程序崩溃或随时间的推移导致性能降级. 内存泄漏(即 malloc()  ...

  2. InnoDB数据页结构

    前言 ​ 关于数据库我们知道是通过内存对磁盘进行操作的,也知道数据会落实到磁盘上,但是数据在磁盘上的存储结构可能大家还不是很清楚. ​ MySQL服务器上负责对表中的数据的读取和写入的工作的部分是存储 ...

  3. 目标反射回波检测算法及其FPGA实现 之三:平方、积分电路及算法的顶层实现

    目标反射回波检测算法及其FPGA实现之三: 平方.积分电路及算法的顶层实现 前段时间,接触了一个声呐目标反射回波检测的项目.声呐接收机要实现的核心功能是在含有大量噪声的反射回波中,识别出发射机发出的激 ...

  4. Oracle单节点_Grid_Infrastructure_DB_安装过程图解(二/三)

    接上文 Oracle单节点_Grid_Infrastructure_DB_安装过程图解(一/三) 接下来,进行Grid Infrastructure 部分的安装:

  5. C++多线程,互斥,同步

    同步和互斥 当有多个线程的时候,经常需要去同步这些线程以访问同一个数据或资源.例如,假设有一个程序,其中一个线程用于把文件读到内存,而另一个线程用于统计文件中的字符数.当然,在把整个文件调入内存之前, ...

  6. JS ,substr、 substring、charAt方法的区别

    JS 截取字符串substr 和 substring方法的区别,需要的朋友可以参考下,根据需要自行选择. substr 方法 返回一个从指定位置开始的指定长度的子字符串. stringvar.subs ...

  7. 大数据中Linux集群搭建与配置

    因测试需要,一共安装4台linux系统,在windows上用vm搭建. 对应4个IP为192.168.1.60.61.62.63,这里记录其中一台的搭建过程,其余的可以直接复制虚拟机,并修改相关配置即 ...

  8. PageHelper分页插件使用

    mybatis的分页插件jar包: 配置方法: 在mybatis配置文件中加下面代码 <plugin interceptor="com.github.pagehelper.PageIn ...

  9. Frida----基本代码

    代码来自官网:https://www.frida.re/docs/examples/android/ import frida, sys def on_message(message, data): ...

  10. java中文显示乱码的解决方式

    myeclipse 10 import 源文件后java文件中文乱码问题,*.java文件中的中文不能显示,都是乱码 解决方法(网上找的,已经过验证): 一.将整个project设置编码UTF-8(U ...