结对项目——电梯调度算法的实现和测试
队员:11061147徐姗&&11061180王宇杰
对于结对编程的总结:
优点:
1、理解代码的效率更高:对于理解由一门不太熟悉的语言写出的程序,结对编程有很强的优势。一个人容易出现似懂非懂的状况,但是两个人,遇到问题就马上提出来,在讨论的过程中不但理解更加深入,也更快速。
2、书写代码的效率更高:两个人有所分工,书写代码速度会更快,并且在写代码的过程中,也不是各写各的,相互之间有交流,谁有灵感就直接说。这样写出的代码更书写效率和执行效率都更高。
3、优化代码的效率更高:优化代码时,队友会用挑剔的眼光看自己所写的代码,这样更易发现问题,否则一个人的思维,总认为自己是对的,是完美的,不知怎样优化。
4、提高与他人的交流能力:结对编程由于是随机分配,使得原本并不熟悉的两个人,要为同一个目标而奋斗,所以增加许多交流的机会,提高自己与队友交流合作能力的同时,建立了友谊。
5、保持编程热情:一个人在解决问题时,很容易因为一点困难,就气馁,但是两个人一起就可以互相激励,共同解决,保持那份热情,继续努力。
缺点:
1、通常情况下,每个人的编程风格都不一样,对于我们这样的初学者来说,很少有人有很好的编程规范,所以理解他人的代码就很不适应,所以我们在今后还是要规范自己的编程风格,方便他人理解。
2、由于结对编程是两个人合作,所以在一定程度上,会产生依赖心理,认为自己可以偷懒,反正有队友呢。
3、有时自己思路很清晰,但队友怎样也无法理解,每个人都坚持自己的想法,容易产生冲突,甚至是对结对编程的抵触情绪。
队友(王宇杰)优点:认真、思维活跃、善于倾听队友的想法并作出理智判断
队友(王宇杰)缺点:学习一门新的语言能力不是很强
Information Hiding信息隐藏
信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。在实现算法的过程中,我们对于不同类做适当的隐藏,即不可访问,这样保证了信息独立性的同时,也保证了其安全性(不易在其他类中被修改)。
interface design接口设计
接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式,就如面向对象程序设计提供的多重抽象化。接口设计包括三个方面:
1、用户接口
用来说明将向用户提供的命令和它们的语法结构,以及软件的回答信息。
2、外部接口
用来说明本系统同外界的所有接口的安排包括软件与硬件之间的接口、本系统与各支持软件之间的接口关系。
3、内部接口
用来说明本系统之内的各个系统元素之间的接口的安排
1、用户接口
用来说明将向用户提供的命令和它们的语法结构,以及软件的回答信息。
2、外部接口
用来说明本系统同外界的所有接口的安排包括软件与硬件之间的接口、本系统与各支持软件之间的接口关系。
3、内部接口
用来说明本系统之内的各个系统元素之间的接口的安排
在本次结对编程中,我们利用了IRequest、IElevator、IPassenger、IScheduler等接口,方便接受用户信息,也方便构建相应类来继承其属性。
loose coupling松散耦合
松散耦合是指模块之间要尽量保持独立,模块之间尽量少的牵连,以免修改一个模块后导致其他模块的异常,这样便于程序的修改和管理。本次编程对于模块之间的设计并未体现,但是从老师给的代码中,我们体会到了模块独立的重要性。
契约式设计
也被称为契约编程,编程的合同,设计合同编程,软件设计方法。它规定,软件设计师应该定义正式的,精确的和可核查的接口规范的软件组件,它扩展了普通的抽象数据类型定义的前提条件,后置条件和不变。契约式设计不会取代常规的测试策略,如单元测试,集成测试和系统测试。相反,它补充外部与内部的自我测试,在测试过程中相隔离测试和生产代码中,可以激活测试。内部的自我测试的好处是,他们可以检测错误,才表现为无效的结果由客户端观察。这将导致更早,更具体的错误检测。
核心算法:
为四个电梯建立四个数组,每当遇到该电梯有请求时,对该电梯已有请求进行排序,数组标号小的存大的楼层数。在任意一层时,先判断离顶层近,还是底层近,确定电梯此刻的移动方向,移动过程中,顺道带上该方向的乘客(如果承载量允许的话)。对于大量出现在0、1层的情况,我们选择从最底层到最顶层,是乘客目的地的楼层就停,不是的继续向该方向前进。
UML类图:
![](http://images0.cnblogs.com/blog/568574/201310/09100436-daf269a23d5444058f7f400f39c65142.jpg)