结对编程 学习手记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 庞梦劼 一.关于结对编程 这次的软工任务既不是单打独斗的个人任务,也不是集思广益的团队项目,而是人数为两人的结对编程.两个人合 ...
随机推荐
- Elasticsearch一些常用操作和一些基础概念
1.查看集群健康状态 [root@ELK-chaofeng01 ~]#curl -XGET http://172.16.0.51:9200/_cat/health?v epoch timestamp ...
- zabbix使用自定义脚本监控内存
我这里的脚本是监控centos7系统的内存.centos7系统的内存如何查看我之前的博客都是有的.这里直接写了监控步骤 1.首先是编写脚本. #!/bin/bash mem_total(){ TOTA ...
- 反射型XSS+文件上传+CSRF—DVWA
在学习的过程中,想到将几种漏洞进行组合练习,记录下学习过程.大佬请绕过!谢谢!! 测试环境:DVWA,安装方法参考上一篇:https://www.cnblogs.com/aq-ry/p/9220584 ...
- January 23rd, 2018 Week 04th Tuesday
Remembrance is a form of meeting, forgetfulness is a form of freedom. 记忆是一种相遇,遗忘是一种自由. Cherish those ...
- input 属性radio中设置checked 不生效
同一个页面中有许多地方都用到了单选按钮并设置了默认选中 , 结果在运行的时候发现单选按钮没有被默认选中 由于是复制然后修改个别属性 ,然后直接使用的 , 所以name值忘记修改了 , 单选框是根据na ...
- 【Beta Scrum】冲刺!4/5
1. 今日完成情况 人员 学号 分工 是否完成 完成情况 胡武成 031502610 完成登录注册api,协助web端完成api Y 基本逻辑写完,短信部分还在修改中,预计明天早上便能完成 郭剑南 0 ...
- arcgis api for javascript中使用proxy.jsp
当我们使用arcgis api for javascript 查询arcgis服务时,如果查询的参数很长时,通过get方式提交会查询不到结果,因为get方式提交的参数有长度限制,需要通过代理的方式使用 ...
- Oracle数据文件改名
1. open状态改名 SYS@userdata>select tablespace_name,file#,file_name,v.status,v.enabled from dba_dat ...
- 【转】python中的一维卷积conv1d和二维卷积conv2d
转自:https://blog.csdn.net/qq_26552071/article/details/81178932 二维卷积conv2d 给定4维的输入张量和滤波器张量来进行2维的卷积计算.即 ...
- 3150luogu洛谷
若说代码 那真的是很水 但是 思想却有点意思 这道题是洛谷博弈论专题的第一道入门题, 然而刚开始我是不会做的, 毕竟是道入门题, 我博弈论还没入门呢. 这道题的做法就是: 如果m为偶数, 那么先手赢( ...