zoukankan      html  css  js  c++  java
  • pairwork(黄敬博12061156和黄伟龙12061172)

    结对编程:

    结对编程的优缺点:

    优点:

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

  • 相关阅读:
    你好毒
    Sketchup创建屋顶插件
    sketchup实体开洞插件holeonsolid
    SolidWork支架模型
    让WebForm异步起来
    正则表达式点滴(2)
    异步调用之精简方式
    浅谈C#中常见的委托
    基于异步方式的语法着色器
    利用WPF的ListView进行大数据量异步加载
  • 原文地址:https://www.cnblogs.com/buaa/p/4034494.html
Copyright © 2011-2022 走看看