结对编程 学习手记ver1.1

????团队成员: 226 高雅智 164刘浩然;

一 结对编程

辛辛苦苦搞了好久的时间,就是没有人家的快,明明算法都差不多,哎~~~

结对的优势,在于双方互相督促,对于代码能贡献自己的能力,人多力量大,优缺点互补吧。

结对的劣势,在有些时候双方的进度不是很统一,而沟通上又出现了很大问题,导致一度我帮不上忙(不知道帮那里T0T),高哥执行力又强,想到啥就写啥,苦苦追了两三天啊,才拉齐进度。在此我要强调沟通的问题,这个事效率提升的最大问题,人和人间想法经常差的很多。

?

二 团队成员简评:

高雅智:非常有动力,非常积极主动,很早就开始催促着我做项目,我们断断续续做了一周吧,就是遇到困难的时候容易暴躁(我想是因为电梯折磨我们过久的原因)。非常的实干,做出了各种尝试,前中期代码都是他写的,我只是在旁边动嘴皮子。

刘浩然:由于我对C#并不是很熟悉,在开始的时候没有跟上进度,在中后期才渐渐帮上忙,提出了一些优化。我想我在逻辑方面稍微强一些,在将算法实际写成代码的时候有所帮助,在后期的bug更改中也贡献了自己的力量。

三 结对编程照片

?

四 关于Information Hiding, interface design, loose coupling和Design by Contract, Code Contract

  1. 信息隐藏

    这个地方是通过类的封装来实现的,使类有自己的独立的"灵魂",就是模块内部的信息及信息处理,不应该被不需要他们的地方访问到。

  2. 接口设计

    网上关于这个地方的说法很多,本次作业中可以看出,接口一定要清晰明确,我的理解是接口算是程序的骨架吧,清晰定义程序的各个部分,各个成员中的方法和属性等,对我起到了很大帮助。

    ?

  3. 低耦合

    出错误好维护,减少类之间的牵连关系,通过消息来实现类之间的通讯,不是直接调用其他类中的函数。

  4. 契约编程

    契约是减少大型项目成本的突破性技术。契约由先验条件、后验条件、错误和不变量等概念组成。这个东西怎么都感觉是上学期面向对象中,吴际老师讲的规格一类的东西,上学期已经有了体验,不过就我们本次作业来说,最开始对整个代码的全局并没有深入了解,之后了解的差不多了,边解读边写,东西也都弄得差不多了,并没有利用这个方法。

?

五.代码类图


?

这长的图总让我感觉屏幕不够大!!!!!!!!

?

?

六.程序理解和算法简析

?

读代码消耗了大量的精力,怎么也不给写个注释和文档呢?!!!说好的养成好习惯呢??!!特别是委托和事件机制的地方,我这种不懂C#的人真的是看的很艰难,希望助教能在明年的课程中给点代码文档和注释,惠及学弟学妹。

好吧,程序的执行过程是这个样子的:

  1. 载入电梯和乘客的配置文件并初始化。
  2. 初始化完毕后,是每秒种执行3至6步,当所有人都到达目标后结束程序,打印统计
  3. 时间和乘客请求时间相同时生成一个外请求。
  4. 请求入列分配电梯
  5. 更新电梯状态:上下电梯,更新当前请求
  6. 将电梯开往目标

我们的算法,是体现在电梯的分配和运行中。在分配方面,会经过计算,选择一个相应时间最快的电梯。在运行过程中,主要体现顺路,会尽量在一个方向上运动,并完成该方向上可完成的所有请求,之后掉头继续。

发现这样做高峰时期非常的慢,我就加上了转电梯的调度,二十个人的测试还是成功了,但1000个人就会非常的慢,可能是我的分配算法有些问题,可是死线在即,来不及好好改了。在此我仅仅说一下转梯的实现,当一个人进入电梯的时候,会看能不能到达他想去的那一层,如果到不了电梯会走到转接层,一般是十层,下电梯的时候会重新生成一个楼层请求,根据这个请求的方向,就可以实现电梯的调度。原理在十层向上只能用0 2 3,向下只能用1 3,而转梯是为了缓解3号压力的,3号人特多的时候转梯才能体现出效率,比如三号到十层的时候负载过大,可以讲人流分解向0 1 2号电梯,减少经停时间,我这里的调度就没有实现好导致跑p2 p3的时候会卡死,bug还没有调出来,作业就要交了。

七.编程过程及结果

????我们先实现了电梯的单独调度,就是讲指令分配给正确的电梯,用到了一个最快相应算法。

????之后我们实现了电梯的顺路,会先执行同方向上所有请求结束后 才会转向,完成另一方向上的请求。

????最后我们实现了被拒绝请求的重新分配,但是不知为何效果非常不理想,总是堆到三号电梯上,导致结果变慢,后来有所优化,但也没快哪去。

20个人跑大概平均每人110个单位时间,Passenger2平均每人大概1000 个单位时间,Passenger3慢很多,大概是1200多单位时间,不知道为啥这么慢….

八.总结

电梯已经折磨了我很久了,特别感谢上学期新主楼的吴际老师,锤炼了我们的意志,锻炼了我们开挖掘机,(⊙o⊙)…不对,是升降机的能力,特别在此次的作业中,去年连续一个月的各种电梯体验给了我们很大帮助。

结对编程的的确确带来了效率上的提升,我是一个很懒的人,但是有队友的催促,我们很早就开始弄,可能因为经验并不充足,最后却没有一个好的结果,本来最开始的雄心勃勃,到后来心灰意冷,怎么都调试都调都很慢的时候,心情真的很不好。到交的前一天晚上我还在写优化,并没有跑通,心情可想而知。回想这一周多的结对编程,虽然提升了代码能力并体会到结对编程的好处,但是我和队友的精神饱受摧残,说多了都是眼泪,就这样吧。

?

?
?

??

时间: 2024-10-27 08:29:40

结对编程 学习手记ver1.1的相关文章

结对编程学习-对梁同学的代码分析评价

本篇博文主要是对我的结对编程伙伴梁同学的代码进行分析,分析别人的代码对我来说是一种挑战,但在分析与总结中或许能找到逐渐变强的关键. 从main函数开始,着实震惊到了我,一个无限循环,一个初始化函数,最后输出一个字符串.三行便结束了main函数.由此观之,梁同学的代码模块化做得很好. 再看初始化函数,发现他将用户名与密码都用数组存储了起来,管理相对方便,有了些数据库的感觉,判断能否登陆的逻辑很清晰,字符提示也很到位. 然后是一个选择函数.这是我很看好的一个函数,通过这个函数将几种可能或者说分支都提

20165222 结对编程学习

第一周 一,需求分析 本次实验的话,学习的新知识不需要很多,大概30分钟.然后跟队友讨论的解决问题,差不多两个小时. 二,设计思路 (1)生成一个随机数a(在我们的代码中a为1-6),用a来表示运算符号的个数. (2)生成随机数组b[],b的值为1-4,分别表示加,减,乘,除. (3)生成随机数组t[],(为了方便计算,我们设计的随机值为1-10),当作代数运算. (4)用if语句,用b的值表示出运算符. (5)通过从左往右计算,算出随机生成的四则运算的值(暂时解决不了优先级运算). (6)判断

结对编程(黄金点游戏)

黄金点游戏 前言:   这次软件工程的作业是以结对编程的形式编写"黄金点游戏".结对编程是指两位程序员坐在同一工作台前开发软件与两位程序员各自独立工作相比,结对编程能写出质量更好更高的代码,达到事半功倍的效果.   黄金点游戏介绍:N个同学(N通常大于10),每人写一个0~100之间的有理数(不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值,提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分.

对二分法的学习体会以及关于结对编程的体验分享

1) 二分搜索技术 二分搜索算法是运用分治策略的典型例子.二分搜索方法充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(logn)时间完成搜索任务. 问题描述:给定已排好序的n个元素a[0: n-1],现要在这n个元素中找出特定的元素x. 解决方法: a) 顺序搜索方法:逐个比较a[0: n-1]中元素,直至找出元素或搜索整个数组后确定x不在其中.该方法没有很好地利用n个元素已排好序这个条件,因此在最坏的情况下,顺序搜索方法需要O(n) 次比较. b) 二分搜索方法:将n个元素分成

结对编程项目:带UI的小初高数学学习软件

用户: 小学.初中和高中学生. 功能: 1.用户注册功能. 2.登录,修改密码 3.在线做题,评分 经验总结 这次的结对编程并没有实现对个人项目的复用,经过对结对编程需求的分析发现个人项目的出题逻辑完全不能用于小初高数学学习软件, 因为在个人项目中的出题逻辑是几乎是采用的完全随机,在结对编程项目中这种逻辑是行不通的,没有办法采用答案,而且在个人项目中我们 都是采用的面向过程的方法,同时我们的个人项目结构也有点混乱,导致了复用的难度很大.所以我们完全重新写了代码,实现了登录/注测, 修改密码,选择

带UI的小初高数学学习软件-与张凯翔同学共同完成结对编程

这次的结对编程是要我们在个人项目的基础上,经过合作和创新,来完成一个带UI界面的出卷答题系统,综合分析题目,这次的项目共有几个难点: 第一,实现UI界面:第二,通过调用短信服务来进行注册:第三,这次登录的账号都要经过注册,这意味这我们需要使用数据库来储存每一个登录或注册的账号,或者使用文件流从txt文件读取:第四,这次不仅需要出题,还要生成四个答案,就是说要负责出题和做题: 经过我们两个人的讨论,我们决定凭借张凯翔同学已经在个人项目实现UI界面的优势,直接使用JAVA语言进行开发,由张凯翔进行U

结对编程——中小学数学数学学习软件——项目总结

一.需求 1.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: 2.用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功.密码6-10位,必须含大小写字母和数字.用户在登录状态下可修改密码,输入正确的原密码,再输入两次相同的新密码后修改密码成功: 3.密码设置成功后,跳转到选择界面,界面显示小学.初中和高中三个选项,用户点击其中之一后,提示用户输入需要生成的题目数量: 4.用户输入题目数量后,生成一张试卷(同一张卷子不能有相同题目,题目全部为

结对编程——带UI的小初高数学学习软件

因为和队友在写个人项目时使用的都是C++语言,所以在结对编程时使用Qt平台创建图形化界面.结对编程的工作量还是很大的,感觉近一周的大部分时间和精力都花在项目上,脑子里都是代码orz. 看到结对编程的项目需求后,我们对接下来的要做的事情有了一定的计划.首先是熟悉开发环境,因为是我们都是第一次做图形化界面,选择了Qt作为开发工具.一开始对于Qt都是没有接触过完全一头雾水的状态.所以我们决定先花一天的时间学习Qt的一些基本操作和了解相关的内容.当大概了解清楚Qt的操作和实现一些简单的功能操作之后,我们

结对编程项目复盘:带UI的小初高数学学习软件

实现个人项目时,由于我当时的Java GUI编程基础还比较薄弱,所以我选择通过命令行实现,并将编程开发的重点放到了算法效率上去.没能设计出用户体验更佳的UI成为了我在个人项目阶段最大的遗憾. 在这次结对编程项目时,有幸能和擅长图形化编程的志豪同学结为队友.他在SIT项目中所学习到的GUI编程方法与我在CCF与ACM训练中积累到的一些算法经验相得益彰,所以在编程项目已经结束的现在,我认为并相信,我们都学到了很多. 经过讨论,我们在一开始便将项目分为四个部分:短信验证码功能实现.UI界面实现.出题功