PairProject 总结
结对编程人员:张迎春,赵梓皓。下面是我们一起编程的照片。
结对编程的优点:
首先,结对编程的目的是为了减少编程的错误,在编程的时候,大家一起检查错误,一起分析有没有更加合理的编写方法,所以这是结对编程的第一个优点。第二个优点是两个人可以交流思想,可以一起探讨更加好的算法,提高算法的质量。而且两个人可以交替编写程序,将任务分散,更高效的利用时间。
缺点:
结对编程的缺点是开始时两个人需要一定的磨合期,需要在程序编写前知道对方的编写习惯,并且尽量先统一一下编写的格式,命名的方式等,不想一个人编程那样随意。其次结对编程时,当一个人做出修改时,必须要写好完整的注释,让对方知道自己程序的含义。最后结对编程要解决两个人的分工问题,合理的分配工作的每个环节。
程序的好设计方法:
信息的隐藏,或者说是程序的封装性,这是为了保证程序的安全性,保证程序的内部信息不会被随便的获得和改写,这使得程序变得更加具有独立性,高内聚,面向对象的特征更加明显,为了保证这一点,我们在程序中对一些需要被外部访问的属性设定了专门的方法,通过方法的方式将内部属性传递出去。
接口的设计。接口的设计在一定程度上决定了继承该接口的类的功能。传递数据信息是接口的一个比较重要功能,通过接口完成相互独立的模块之间的信息传递,很好的保护了程序的封装性。
程序模块间的低耦合性。这使得程序之间的联系尽可能的少,不再会“牵一发而动全身”。低耦合性使得程序的维护变得简单,某个程序更改后,其他的程序只需要做很小的修改,甚至不需要修改就可以使用。
关于契约式编程:
契约式编程可以减少软件开发的成本,要求软件设计者为软件组件定义正式的,精确的并且可验证的接口,这样,为传统的抽象数据类型又增加了先验条件、后验条件和不变式。契约式编程就是函数调用者应该保证传入函数的参数是符合函数的要求,如果不符合函数要求,函数将拒绝继续执行。按照契约式编程的思想编写代码,就要求我们写函数时检查函数参数。契约式编程使得软件开发的分工更加合理,加强了开发的安全性,降低了开发的困难程度。
Unite test结果如下
我们对绝大多数的方法进行了全方面的测试(主要是后来我们修改过或者自行添加的函数,一些get和单纯的传递属性的函数没有进行测试,因为意义不大)。
UML截图如下,我们选取了该程序中主要的五个类做出了UML图,以便于更加清晰的反映各个类之间的关系。主要有电梯类,调度类,乘客类,请求类,调度规划类。具体如下。
我们的算法:
由于实现实时分配调度任务比较困难,所以我们采用了及时分配的策略。具体如下:
我们更改了程序的接口,放弃了原来的调度队列,并将其分解为四个独立的调度队列,分别对应于四个电梯。当有一个乘客发出方向请求时,我们会根据电梯当前的状态计算出电梯来接这位乘客的花费(包括到该层的时间和电梯中原有的乘客要在这层等待的时间花费),选择当前花费最小的电梯,将该请求加入到这部电梯的调度队列之中。如果所有的电梯调度花费都是无穷大(比如电梯当前不顺路或者电梯根本无法到达该层),那么这个乘客的请求将会被搁置,直到某个时刻有电梯到该层的花费不是无穷大,由该电梯来接受请求。对于电梯去接乘客,但是发现乘客要求去得楼层电梯不能够到达时,乘客不会进入电梯。该乘客将再次发出请求(实际情况也是这样),并且乘客会记住这个电梯,对这个不能到达目的地的电梯进行标记,从其他的电梯中进行选择。为了优化上下班高峰期的情况,我们对电梯的请求队列内的请求数进行了优化。当该电梯的请求过多时,电梯便不会再接受请求,这样一方面减少了乘客们等待的时间,另一方面也是的请求尽量分配到多个电梯,使电梯的调度分配更加合理。还有就是一些小的细节上的优化,比如电梯不会接受在自己的最高层发出的向上的请求,不会接受在自己的最底层发出的向下的请求等等。
PairProject 总结的更多相关文章
- 关于软件工程结对编程作业 PairProject : Elevator Scheduler(电梯调度算法的实现与测试)的总结
1)结对编程队友 1106xxxx 张扬 1106xxxx 杨军 其中,此项目的编程实现主要由前者完成. 2)关于结对编程 结对编程的优点: 最直接的一点:在结对编程中,由于有另一个人在你身边和你配合 ...
- 软件工程——PairProject
结对编程组员: 马辰 11061178 柴泽华 11061153 1) 照至少一张照片, 展现两人在一起合作编程的情况. 结对编程的优点 1)在编程过程中,任何一段代码都不断地复审,同 ...
- Pairproject 移山之道 阅读随笔和一些问题
首先不得不承认这本书的写作方式很独特,不像其他的计算机类的图书那样枯燥,让人读起来感觉很有意思,他也颠覆了我对计算机类图书的看法,这种写作方式值得我们学习. 先谈谈收获吧.读了两年大学,这是第一次写类 ...
- PairProject——结对编程
成员:12061162 王骜 12061225 钟毅恒 一.合作过程中的照片 . 二.结对编程的优缺点 优点: 1)在编程过程中,任何一段代码都不断地复审,同时避免了将写代码的责任抛给一个人的问题 ...
- PairProject 电梯调度 【附加题】
[附加题] 改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享. 目前的设计有什么缺点, 你会如何改进它? 1.之前判断电梯是否闲置的函 ...
随机推荐
- k-vim安装及The ycmd server SHUT DOWN (restart with ':YcmRestartServer')这种错误的解决方法
vim配置 下载地址:https://github.com/wklken/k-vim 安装步骤: 1. clone 到本地 git clone https://github.com/wklken/k- ...
- C#项目实践之一——WPF多媒体通讯录
1.Window.Resources 是一种Window级的资源定义. Window.Resources它的作用范围就是在Window容器里的所有子控件,也只有这些子控件才能引用/调用这些资源 Gr ...
- 【16】有关python面向对象编程
面向对象编程 一.第一个案例---创建类 #__author:"吉" #date: 2018/10/27 0027 #function: # 设计类: ''' 1 类名:首字母大写 ...
- Spring消息中间件ActiveMQ
1:下载ActiveMQ (apache-activemq-5.15.6) 2:下载后的结构如下 3:启动activeMQ 可以通过cmd控制台的方式,也可以通过注册services服务启动的方式 3 ...
- Spring集成JUnit单元测试框架
一.JUnit介绍 JUnit是Java中最有名的单元测试框架,用于编写和运行可重复的测试,多数Java的开发环境都已经集成了JUnit作为单元测试的工具.好的单元测试能极大的提高开发效率和代码质量. ...
- android Application Component研究之Activity(二)
http://blog.csdn.net/windskier/article/details/7172710 本文为原创文章,欢迎转载!转载时请注明出处:http://blog.csdn.net/wi ...
- 浅谈 js中parseInt函数的解析
首先还是从很热门的实例parseInt("09")==0说起. parseInt(number,type)这个函数后面如果不跟第2个参数来表示进制的话,默认是10进制. 比如说pa ...
- Qt5中的lambda表达式和使用lambda来写connect
c11新特性中加入了lambda表达式,所以Qt 也支持 需在.pro文件中加入 CONFIG += c++11 例子: QString program = "C:/Windows/Syst ...
- matlab的conv2、imfilter、filter2
1 conv2函数 C=conv2(A,B,shape); %卷积滤波 参数说明: A:输入图像 B:卷积核 shape的可选值为full.same.valid. 1)当shape=full时,返回全 ...
- 【Codeforces Round 464】Codeforces #265 (Div. 1)
模拟RD265 ABC三题,Rank58 Codeforces 464 A 题意:给定一个字符串,求比这个字符串字典序大并且和它长度相等的第一个不含有长度大于等于2的回文串的字符串. 思路:首先我们枚 ...