结对编程——电梯调度
12061181 高孟烨
12061182 郝倩
1、结对编程的优缺点:
优点:结对编程可以结合两个人各自擅长之地,充分发挥两个人各自的优势,两个人一起合作效率会更高。一份工作两个人一起完成,每个人的强项、弱项不同,如果分工合理,便可以事半功倍
缺点:如果两个人的实力相差太大,则会造成沟通困难,一起写程序也会遇到一定的麻烦。或者如果有人态度不端正,无法进行好的沟通交流,则会使任务失败,两个人也得不到应有的锻炼。
2、各自优缺点:
高孟烨:算法构建能力较强;做事认真,细致;善于思考。动手能力相对较弱。
郝倩:时间观念强;代码能力不弱;很认真。做事情不是很细致,构建算法时会有一些漏洞。
3、一起合作编程的照片
4、Design by Contract, Code Contract
契约式设计的核心是断言(assertion)。所谓“断言”,是指永远为真的布尔型语句,如果不为真,则程序必然存在错误。它使用了三类断言:后继条件(post-conditions),前提条件(pre-conditions),以及不变量(invariants)。
由于信息隐蔽原则,我们在调用一个接口时,并不知道它内部实现的细节。为了顺利使用接口,首先需要满足前提条件。这个前提条件就是指在执行操作之前,期望具备的环境。满足前提条件接口使用顺利后,自然而然得到了一个后继条件——指操作执行完之后的情况。不变量是关于类(class)的断言,无论是否能对该对象调用某种操作都需要满足的条件。
5、算法思想:
电梯的状态从大的方面无非可以分为两种:
(1)电梯停止时:若电梯内有人,则目的地为该楼层的乘客离开电梯,发出请求的楼层为该楼层的乘客进入电梯,接着调度离当前楼层最近的请求。若电梯内没人,选择等待队列里离当前楼层最近的请求,如果等待队列也为空,则电梯停止不动。
(2)电梯运动时:在每层判断是否有该层到当前目标楼层之间的的外部请求,若有则判断方向是否与电梯运行方向一致,以及请求发出时间是否在电梯到达发出请求所在楼层的时间之前,若符合以上条件,则电梯在该外部请求发出的楼层停,开门使乘客进入,关门;若不符合,则继续顺序执行。
另外在判断以上各条件完成之后,能使乘客真正进入电梯并有电梯完成其请求,还要判断一下几个条件:
a)该请求的fromfloor以及tofloor是否为该部电梯的可达楼层
b)若乘客可以进入电梯,电梯是否会超载(参考每部电梯的重量和人数限制)
如果这两个条件至少有一个不满足,那么这位乘客就不能进入这部电梯到达自己的目的地,只能等待其他符合条件的电梯来搭乘。
6、unittest
7、UML图