peer program 叶露婷 王卓
- Advantages Or Disadvantages Of Peer Programming
a. Advantages Of Peer Programming
(1) 分工比较明确,设计和实现由不同的完成。那么观看的人可以有空闲的时间做额外的思考和检查,避免不必要的小错误。
(2) 可以让结对的两个程序员都有很大的提高。较资深的程序员可以通过给他人的讲解使思路更加清晰,新手可以从资深程序员那里收获到方法。
(3)容易让所有人都熟悉每个模块,在编程的过程中,要是其中一方有事外出,这样子也不会因为对代码的不了解而手足无措。
(4) 在一方状态不好,小错误频出的时候,可以及时提醒
b. Disadvantages Of Peer Programming
(1)要是两个人的编程习惯和风格存在较大的差异,那么在工作中可能会产生矛盾
(2)当对于一个问题有不同的看法的时候,双方都容易各执己见产生矛盾
(3)容易产生一种抱大腿心理。编程能力较弱者容易将过多任务放在资深程序员身上
(4)两个人容易造成注意力的分散,可能俩个人兴趣比较相似,则会导致玩心
(5)新手和老手合作的时候会比较紧张,所以在编程的过程中容易导致新手的紧张和老手的烦躁。
(6)有些资深程序员比较喜欢孤军作战。这样让新手很没有存在感,也就失去了结对编程的意义

个人优缺点:叶露婷:对代码细节的理解能力强,算法的思路清晰,但有时编写代码时不细心。
王卓:有较强的逻辑思维能力,对问题的分析比较透彻,在编程过程中可以看出有良好的编程风格,最让队友崩溃的是拖延症
2.Information Hiding, interface design, loose coupling
a.信息隐藏
信息隐藏的实现通过类的封装,每个类都是一个独立的模块,实现特定的功能,它与接口是相对应的,对于那些不需要访问的属性则不能访问。
b.接口设计
在团队工作中,接口体现了非常好的优势,在面对任务时候,先进行设计,定义好接口,之后分工明确,再去实现这些接口时就会大大提高工作效率。
c.松耦合
松耦合系统通常是基于消息的系统,此时客户端和远程服务并不知道对方是如何实现的。客户端和服务之间的通讯由消息的架构支配。对于电梯程序而言,各个类的独立性很高,例如SigmaPassenger和SenElevator,他们不用去实现对方是怎样运作的。
3.Design by Contract, Code Contract
a、契约式设计的提出,主要基于软件可靠性方面的考虑。可靠性包括正确性和健壮性,正确性指软件按照需求规格执行的能力,健壮性指软件对需求规格中未声明状况的处理能力。健壮性主要与异常处理机制相关 。正确性一方面包括对象元素内部运行的正确性,另一个重要方面是与其它对象元素交互时的正确性。契约式设计就是要求提供一套机制,在客户程序与提供者之间明确的声明双方的职责与权利,即契约,并能够对这些契约进行验证。他保证了一方能够按需求提供正确可调用参数,另一方保证程序的可运行正确性。
b、契约代码优势在于编译前执行检查(如若设置异常类型使用EnsuresOnThrow<Exception>则会在编译时抛出异常),这样比较编译后检查有明显的优势。
c、在我的程序作业之中,我将一些必要且需更新变量置于更新函数中,确保元素数据处理正确性,并且保证接口调用正确性。
4.算法实现:
对于一个方向请求,我们需要派去一个电梯。电梯派取是由电梯到达请求楼层的时间所决定的。
时间的算法:
当有电梯处于停止状态时,电梯到达请求楼层的时间t=|当前楼层-请求楼层|*5;
当电梯的运动方向与请求的方向相同时,分为两种情况,
- 可以捎带:t=|电梯当前所在的高度-请求楼层*10|/2
- 不可以捎带:t=(当前需要到达的最高楼层*2*10-(请求楼层*10-电梯当前的高度))/2
当电梯的运行方向与请求方向不一致时,分为两种情况,
- 当电梯方向向下,请求方向向上时,t=(请求楼层*10+电梯当前所在的高度)/2
- 当电梯方向向上,请求方向向下时,t=(2*10*电梯当前需要到达的最高楼层-请求楼层*10-电梯当前的高度)/2
四个电梯都按照上述算法求出时间,将所需时间最短,并且剩余容量能够承载这个乘客,并能到达当前楼层的电梯分配给这个请求。
然后我们在每个电梯之中都设置了一个targets属性,里面存储了电梯当前所需要停下的楼层,如果电梯需要去新的楼层,则将这个楼层号加入到这个队列中,要是电梯到达了一个楼层,则需要将这个队列中的这个楼层号全部删去。
电梯的下一个停靠楼层需要根据电梯的历史状态和targets来判断
a.如果运动的历史方向是向下的,那么就在targets中找是否有比当前楼层低的楼层号,要是有,则返回;要是没有再找比当前楼层大但是最接近的值,返回作为楼层号;要是没有,则返回当前楼层号作为下一个停靠的楼层
b.如果运动的历史方向是向上的,那么那么就在targets中找是否有比当前楼层高的楼层号,要是有,则返回;要是没有再找比当前楼层小但是最接近的值,返回作为楼层号;要是没有,则返回当前楼层号作为下一个停靠的楼层
5.UML类图



浙公网安备 33010602011771号