结对编程 学习手记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 庞梦劼 一.关于结对编程 这次的软工任务既不是单打独斗的个人任务,也不是集思广益的团队项目,而是人数为两人的结对编程.两个人合 ...
随机推荐
- centos7下安装指定版本mysql5.7.23
现在mysql版本已经到MySQL 8.0(GA)稳定版本了,所以需求是想简单又快速在centos7下安装指定版本例如MySQL 5.7(GA)版本有下面这种方法 首先需要到mysql官网这里下载对应 ...
- 解决pycharm下代码报错的问题
file-----settings------project:Pythonstudy------project structure-----选择要导入的文件并点击OK
- 浅copy与深copy举例
例1: #!/usr/bin/env python import copy d1 = {'x':1,'y':2,'z':[3,4.5]} d2 = d1 d3 = d1.copy() d4 = co ...
- Lua与C交互之基础操作(1)
@(语言) Lua是一个嵌入式的语言,可以Lua可以作为程序库用来扩展应用的功能,也可以注册有其他语言实现的函数,这些函数可能由C语言(或其他语言)实现,可以增加一些不容易由Lua实现的功能.这就是L ...
- IDEA设置注释的颜色
IDEA默认的灰色注释确实让人看不清,但如果把灰色调成黑色又和代码的颜色相同了,所以,不如给注释添加上绿色的背景,又护眼又容易分辨 新版本的IDEA打开Settings——Editot——Color ...
- Deepin系统手动安装oracle jdk8详细教程
Deepin系统手动安装oracle jdk8详细教程 oracle官网下载jdk压缩包,使用 sudo tar -zxf jdk***解压文件,我放在在了home/diy/java/jdk路径下. ...
- JDBC学习笔记之JDBC简介
1. 引言 JDBC API是一种Java API,可以访问任何类型的表格数据,特别是存储在关系数据库中的数据. JDBC可以帮助我们编写下列三种编程活动的java应用程序: 1.连接到数据源,如数据 ...
- Django之form表单认证
Model常用操作: - 参数:filter 三种传参方式 - all(得到的是列表),values(字典),values_list(元祖) [obj(id,name,pwd,email),obj(i ...
- win10系统安装两个版本的python,该怎么安装Django
最近遇到一个问题,系统上安装了python2,7 和python3.5两个版本,然后使用命令:pip install Django 安装Django后却发现以下情况: Traceback (most ...
- UVA1103-Ancient Messages(脑洞+dfs)
Problem UVA1103-Ancient Messages Accept: 1176 Submit: 6103 Time Limit: 3000 mSec Problem Descriptio ...