结对编程 学习手记ver1.2
团队成员: 226 高雅智 164刘浩然;
一 结对编程
辛辛苦苦搞了好久的时间,就是没有人家的快,明明算法都差不多,哎~~~
结对的优势,在于双方互相督促,对于代码能贡献自己的能力,人多力量大,优缺点互补吧。
结对的劣势,在有些时候双方的进度不是很统一,而沟通上又出现了很大问题,导致一度我帮不上忙(不知道帮那里T0T),高哥执行力又强,想到啥就写啥,苦苦追了两三天啊,才拉齐进度。在此我要强调沟通的问题,这个事效率提升的最大问题,人和人间想法经常差的很多。
二 团队成员简评:
高雅智:非常有动力,非常积极主动,很早就开始催促着我做项目,我们断断续续做了一周吧,就是遇到困难的时候容易暴躁(我想是因为电梯折磨我们过久的原因)。非常的实干,做出了各种尝试,前中期代码都是他写的,我只是在旁边动嘴皮子。
刘浩然:由于我对C#并不是很熟悉,在开始的时候没有跟上进度,在中后期才渐渐帮上忙,提出了一些优化。我想我在逻辑方面稍微强一些,在将算法实际写成代码的时候有所帮助,在后期的bug更改中也贡献了自己的力量。
三 结对编程照片

四 关于Information Hiding, interface design, loose coupling和Design by Contract, Code Contract
- 信息隐藏
这个地方是通过类的封装来实现的,使类有自己的独立的"灵魂",就是模块内部的信息及信息处理,不应该被不需要他们的地方访问到。
- 接口设计
网上关于这个地方的说法很多,本次作业中可以看出,接口一定要清晰明确,我的理解是接口算是程序的骨架吧,清晰定义程序的各个部分,各个成员中的方法和属性等,对我起到了很大帮助。
- 低耦合
出错误好维护,减少类之间的牵连关系,通过消息来实现类之间的通讯,不是直接调用其他类中的函数。
- 契约编程
契约是减少大型项目成本的突破性技术。契约由先验条件、后验条件、错误和不变量等概念组成。这个东西怎么都感觉是上学期面向对象中,吴际老师讲的规格一类的东西,上学期已经有了体验,不过就我们本次作业来说,最开始对整个代码的全局并没有深入了解,之后了解的差不多了,边解读边写,东西也都弄得差不多了,并没有利用这个方法。
五.代码类图





这长的图总让我感觉屏幕不够大!!!!!!!!
加上点单元测试的图

由于多数函数都没有返回值….覆盖不是很充分….
六.程序理解和算法简析
读代码消耗了大量的精力,怎么也不给写个注释和文档呢?!!!说好的养成好习惯呢??!!特别是委托和事件机制的地方,我这种不懂C#的人真的是看的很艰难,希望助教能在明年的课程中给点代码文档和注释,惠及学弟学妹。
好吧,程序的执行过程是这个样子的:
- 载入电梯和乘客的配置文件并初始化。
- 初始化完毕后,是每秒种执行3至6步,当所有人都到达目标后结束程序,打印统计
- 时间和乘客请求时间相同时生成一个外请求。
- 请求入列分配电梯
- 更新电梯状态:上下电梯,更新当前请求
- 将电梯开往目标
我们的算法,是体现在电梯的分配和运行中。在分配方面,会经过计算,选择一个相应时间最快的电梯。在运行过程中,主要体现顺路,会尽量在一个方向上运动,并完成该方向上可完成的所有请求,之后掉头继续。
发现这样做高峰时期非常的慢,我就加上了转电梯的调度,二十个人的测试还是成功了,但1000个人就会非常的慢,可能是我的分配算法有些问题,可是死线在即,来不及好好改了。在此我仅仅说一下转梯的实现,当一个人进入电梯的时候,会看能不能到达他想去的那一层,如果到不了电梯会走到转接层,一般是十层,下电梯的时候会重新生成一个楼层请求,根据这个请求的方向,就可以实现电梯的调度。原理在十层向上只能用0 2 3,向下只能用1 3,而转梯是为了缓解3号压力的,3号人特多的时候转梯才能体现出效率,比如三号到十层的时候负载过大,可以讲人流分解向0 1 2号电梯,减少经停时间,我这里的调度就没有实现好导致跑p2 p3的时候会卡死,bug还没有调出来,作业就要交了。
七.编程过程及结果
我们先实现了电梯的单独调度,就是讲指令分配给正确的电梯,用到了一个最快相应算法。
之后我们实现了电梯的顺路,会先执行同方向上所有请求结束后 才会转向,完成另一方向上的请求。
最后我们实现了被拒绝请求的重新分配,但是不知为何效果非常不理想,总是堆到三号电梯上,导致结果变慢,后来有所优化,但也没快哪去。
20个人跑大概平均每人110个单位时间,Passenger2平均每人大概1000 个单位时间,Passenger3慢很多,大概是1200多单位时间,不知道为啥这么慢….
八.总结
电梯已经折磨了我很久了,特别感谢上学期新主楼的吴际老师,锤炼了我们的意志,锻炼了我们开挖掘机,(⊙o⊙)…不对,是升降机的能力,特别在此次的作业中,去年连续一个月的各种电梯体验给了我们很大帮助。
结对编程的的确确带来了效率上的提升,我是一个很懒的人,但是有队友的催促,我们很早就开始弄,可能因为经验并不充足,最后却没有一个好的结果,本来最开始的雄心勃勃,到后来心灰意冷,怎么都调试都调都很慢的时候,心情真的很不好。到交的前一天晚上我还在写优化,并没有跑通,心情可想而知。回想这一周多的结对编程,虽然提升了代码能力并体会到结对编程的好处,但是我和队友的精神饱受摧残,说多了都是眼泪,就这样吧。
结对编程 学习手记ver1.2的更多相关文章
- 结对编程学习fault、error、failure三种状态
点滴成就 学习时间 新编写代码行数 博客量(篇) 学习知识点 第一周 10小时 0 0 了解软件工程 第二周 10小时 0 1 项目开题 第三周 15小时 0 1 开通博客.开展项目调查 第四周 20 ...
- 结对编程项目复盘:带UI的小初高数学学习软件
实现个人项目时,由于我当时的Java GUI编程基础还比较薄弱,所以我选择通过命令行实现,并将编程开发的重点放到了算法效率上去.没能设计出用户体验更佳的UI成为了我在个人项目阶段最大的遗憾. 在这次结 ...
- 结对编程——带UI的小初高数学学习软件
一.简介 本次项目要求: 1.所有功能通过图形化界面操作,可以是桌面应用,可以是网站(编程语言和技术不限): 2.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: ...
- 结对编程--基于android平台的黄金点游戏
游戏内容: 阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫“黄金点”的游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或1 ...
- 关于软件工程结对编程作业 PairProject : Elevator Scheduler(电梯调度算法的实现与测试)的总结
1)结对编程队友 1106xxxx 张扬 1106xxxx 杨军 其中,此项目的编程实现主要由前者完成. 2)关于结对编程 结对编程的优点: 最直接的一点:在结对编程中,由于有另一个人在你身边和你配合 ...
- 结对编程—黄金点游戏WinForm单机版
本小游戏场景来自邹欣老师的<移山之道>一书: "阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫"黄金点"的游戏: ...
- 结对编程——关于Fault、Error、Failure程序设计
一.问题描述: 构造程序,分别是: •不能触发Fault •触发Fault,但是不能触发Error •触发Error,但是不能产生Fai ...
- GUI、模块化与结对编程(homework-03)
摘要: 在本次作业博客里,我将主要阐述作业3的收获.作业3表面是将之前的程序转换为图形界面(之前程序见http://www.cnblogs.com/shone/p/3348372.html),然而本质 ...
- 11061160_11061151_Pair Project: Elevator Scheduler软件工程结对编程作业总结
软件工程结对编程作业总结 11061160 顾泽鹏 11061151 庞梦劼 一.关于结对编程 这次的软工任务既不是单打独斗的个人任务,也不是集思广益的团队项目,而是人数为两人的结对编程.两个人合 ...
随机推荐
- 国内常用的几个NTP时间服务器
问题描述: 经常Windows或者Linux系统上面的时间跟我们本地的时间不一致 有时候就是Windows的Internet时间设置里面的Windows自带的时间同步服务器不好使 Linux配置NTP ...
- 解决关于phpstorm打开速度很慢的问题
我的电脑是GTX950M , 8G 内存的 ,配置不算低但是打开phpstorm的速度非常的慢.基本上每次打开都要花一分钟以上,虽然打开sublime text3 只需要三四秒,但是phpstorm功 ...
- MySql/Oracle和SQL Server的分页查
假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询: 1 SELECT 2 * 3 ...
- Django之ORM查询
ORM 映射关系: 表名 <-------> 类名 字段 <-------> 属性 表记录 <------->类实例对象图书管理系统的增删改查:代码如下:views ...
- cocos2d-x 3.0 安装及创建项目
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/LanerGaming/article/details/24146921 好久没实用过cocos2d- ...
- request.servervariables参数
ServerVariables ServerVariables 集合检索预定的环境变量. 语法 Request.ServerVariables (server environment variable ...
- 对原型(prototype)理解?
Javascript是一种通过原型实现继承的语言,与别的高级语言是有区别的,像Java,C#是通过类型决定继承关系的,JavaScript是的动态的弱类型语言,总之可以认为JavaScript所有都是 ...
- iptables四表五链及默认规则使用,
网络基础 TCP/IP模型: 应用层===传输层===网络层===数据链里层===物理层 数据封装: MAC帧头+IP报头+TCP/UDP报头===HTTP请求 数据帧 TCP/UDP报头: 随机产生 ...
- Ubuntu 上安装QTAV第三方视频库
安装QtAV的基本环境: sudo apt-get install build-essential sudo apt-get install libgl1-mesa-dev sudo apt-get ...
- 学习CSS布局 - max-width
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...