结对项目-------陈伯雄&&贾伟
通过这次结对编程我体会的结对编程的优点和缺点:
优点:
1、有利于提升项目质量,减少Bug;
2、有利于知识传递,降低学习成本;
3、多人熟悉同一段代码,减少项目风险;
4、与别人一起工作,相互讨论,可能更快更有效地解决问题;
5、个人承担的压力不会那么大。
缺点:
1、对于有不同编程习惯的人员来说,结对编程可能会造成麻烦;
2、编程人员水平相差较大时,有经验的老手可能会觉得非常的烦躁。不合适的沟通会导到团队的不和谐。
3、程序员因为意见不同讨论的时间过长导致项目失败或者延期。
我的队友贾伟的有点与缺点:
优点:
1、为人谦虚好学,温文儒雅,易于相处合作;
2、有较强的编程能力,对问题有独到的见解,对我们结对合作有很大帮助;
3、责任心强,能够感染到同组的人,是大家认真参与合作;
缺点:
团队之间的交流还不够。
问:看教科书和其它资料中关于 Information Hiding, interface design, loose coupling 的章节,说明怎样利用这些好的设计方法。
答:信息隐藏,接口定义,松耦合,使程序具有良好的封装性,便于扩展功能而不影响缘由的类,在电梯调度的工程里,定义了许多诸如电梯,乘客,搭乘请求的接口,并将接口封装到commons.cs 文件中,在program,elevator,loaders,passenger上都有应用,而在我们工作的重点电梯调度算法(scheduler)上,恰当使用这些接口,继承拓展原来简单的scheduler,同时在拓展原scheduler类的同时,我们也充分利用以上方法,拓展员初始化类和QueueReq类,并将各种判断条件从主题函数run()中分离出来,方便以后修改复用,例如:IsAtTopFloor/IsAtBottomFloor 函数判断电梯调度边界条件,LastScheduler定义最近调度方案,尽可能减少重复代码。
问:看 Design by Contract, Code Contract ,描述这些做法的优缺点, 说明你是如何把它们融入你的作业中的。
答:Design by Contract(契约式设计)是Bertrand Meyer总结的一项设计技巧,也是Meyer发明的Eiffel语言的主要特点。不过,这条原则的作用范围并不局限于Eiffel,而是所有的程序设计语言。
Design by Contract使用了三类断言:后继条件(post-conditions),前提条件(pre-conditions),以及不变量(invariants)。前驱条件与后继条件都是针对操作(operation)而言的。
契约式设计的三个关键词:
一 前置条件(precondiction):
为了调用函数,必须为真的条件,在其违反时,函数决不调用,传递好数据时调用者的责任。
二 后置条件 (postcondion):
函数保证能做到的事情,函数完成式的状态,函数有这一事实表示它会结束,不会无休止的循环
三 类不变项(class invariant):
从调用者的角度来看,该条件总是为真,在函数的内部处理过程中,不变项可以为变,但在函数结束后,控制返回调用者时,不变项必须为真。(摘自:UML Distilled 3rd edition译文)
我对此此的理解是:约式设计的主要目的是希望程序员能够在设计程序时明确地规定一个模块单元在调用某个操作前后应当属于何种状态,是一种设计风格,一种语法规范;有了语言级别的前置后置条件和不变式的明确定义,程序的结构变得更加便于阅读和交流。而且契约有助于测试。写契约时,你必须用先验条件和后验条件来说明每个例程的任务,之后还必须撰写程序体内的实现代码以完成任务。由于不得不按照两种稍有差别的方式思考这个程序,你将能更清楚地理解这个程序的任务和完成任务的方法。这样做也有助于我们尽早发现错误。测试更加到位,因此代码更加可靠 断言在运行时进行检测,从而确保程序符合它们既定的契约。契约可以随意关闭或者启用,因此我们能够方便地反复测试程序的各个部分。但是断言不能沿着继承层次往下遗传。如果你重新定义 了某个具有合约的基类方法,实现该合约的的断言不会被正确调用(除非你再新的代码中复制他们),你必须手工调类不变项,基本的合约不会主动实现。
程序代码合约(Code Contracts)是.NET Framework 4.0的新功能,它是微软对契约式编程(Design by contract)概念所提出的一种解决方案,主 要由前置条件(Preconditions)、后置条件(Postconditions)、与对象非变异(Object Invariants)这三大契约所构成,可以很容易的为程序代码加入验证 程序代码,降低程序的错误发生率,提高程序的质量,也可以整合单元测试,减少单元测试的工作量,甚至整合文档管理器,让产出的程序文件更为详细 。
使用Code Contracts主要可让我们享有下列四项特点:
1、提升自动测试程度
2、静态验证
3、执行阶段验证
4、文件产生
UML图:
算法设计思路:
我们采取的是简单的电梯调度,电梯根据就近原则,根据最近的申请进行响应,当电梯静止时,并且历史状态为静止时,将最近请求层数设为目标层数,方向设为向目标楼层方向;当历史状态有前进方向时,将申请方向相同,楼层在当前楼层前进之前的最近请求楼层设为目标楼层,方向为历史前进方向,直至目标达到楼层或者顶层,底层。
电梯运行途中遇到请求:将申请方向相同,楼层在当前楼层前进之前的最近请求楼层设为目标楼层,方向为历史前进方向,直至目标达到楼层或者顶层,底层(边界条件)。
当电梯没有接受到来自外部的请求时,电梯返回1层(1层的人流量相对较大)。