结对编程ending-我和洧洧的碎碎念
应该是第一次和队友分工合作去完成一个项目,其中也经历了跳进不少坑又被拉回来的过程,总体来说这对于我俩也的确是值得纪念的一次经历。
我的碎碎念时间……
对比个人项目和结对编程项目二者需求,前者重在面对不同对象生成题目到文本,而后者涉及的方面就更多。除了可以复用个人项目生成题目这一模块之外,项目还有很多难点需要攻破,并且在完成项目过程中也遇到了各种各样的问题:
1、用户注册模块实现短信验证码功能;
- 阿里云注册申请短信签名;
- 将demo嵌入生成短信验证码这一button的监听事件;
单独运行demo需要自己写一个主函数,测试手机的确可以收到验证码之后,将这一模块放进项目中单独为一个类,不再需要主函数,在注册界面加入按钮监听功能。在此调用验证码类的功能。
实现中遇到的问题就是与队友界面的代码进行综合的时候,粗心将输入验证码的文本变量verification当成了按钮,调用功能不能实现,改了很久很久……最后队友发现这个问题才得到解决。一方面也是两个人编程各自实现功能时候还好,综合的时候确实暴露了很多问题,各自编码风格,命名习惯等等,交流磨合是必不可少的过程,自己也确实从队友这里收获许多;另一方面就是个人完成模块一定要耐心细心,申请签名的确浪费时间磨人耐心,写代码的时候细心一些才不会因为小错误浪费时间。
registered.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent em)
{
try {
StudyUI smsUtils = new StudyUI();
String telphoneString = ad.getText();
smsUtils.sendSms(telphoneString);
}
catch (ClientException e) {
e.printStackTrace();
}
}
});
2、UI界面的文本数据监听并利用;
在项目中有一个这样的需求,就是用户还是要在界面输入生成的题目数量,之后会生成相应数量的题目。
个人项目可以直接用循环解决,但在这次项目中,这个问题就比较难办,因为输入数量的文本在一个界面,得到这个数据之后直接控制之后需要产生多少个题目界面(前提一道题目一个界面),项目中两个功能分成了两个界面,不能同时利用这一变量,后来也是朋友讲解才明白要利用静态变量。单独写一个类来声明这些‘“共享”的变量,之后在需要的类中import这个类即可。
public class GetNum
{
static int k; //题目数量
static int count; //生成界面数量
static int score; //显示得分
}
之后就是在输入题目数量的界面将自定义的值赋给K,一开始自己是直接将赋值语句 String numb=num.getText(); GetNum.k=Integer.valueOf(numb); 写进了文本num的监听模块,在之后测试产生的界面数量时为0,显然是这个值没有赋过去,后来反复的调试输出测试,发现是自己选择监听模块出了错,这里就有一个逻辑问题,num是用来监听输入的数量,输入之后这个监听功能就实现并且完成,不能在这里直接getText,在接下来的按钮模块或者其他模块直接getText才可以。这的确是一个很大的教训,在这块花费的时间很长,并且像这种错误还不容易发现。
primary.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e)
{
String numb=num.getText();
GetNum.k=Integer.valueOf(numb);
dispose();
run(new MyQuiz(),500,350);
} });
num.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
int c=e.getButton();
if(c==MouseEvent.BUTTON1 && num.getText().equals("题目数量")&&e.getClickCount()==1)
{
num.setText(null);
}
} });
这一模块就是用户在做题的时候按NEXT会到下一界面的题目,控制判断语句中的k就是“共享变量”K,在修改了上面所说的错误之后这里实现起来就简单一些,得到了用户输入的值,这里控制如果界面数量没有超过K值会继续产生题目,反之出现最终的分数界面。
Next.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//System.out.println(GetNum.count);
//System.out.println(GetNum.k);
if(GetNum.count<GetNum.k-1)
{
dispose();
run(new MyQuiz(),500,350);
GetNum.count++;
}
else {
dispose();
run(new MyScore(),500,350);
}
}
});
这大概是项目中花费时间最长爬出来的两个坑,在这次项目中也是真的感受到队友的细致与认真,有时候已经到自己觉得:啊啊啊好麻烦,不然就这样吧。结果还是队友找到了解决的更好的办法,所以这次经历不仅是提升编程能力过程,也能感受到他人身上值得学习的东西。期间的交流和改bug的过程也是一份珍贵的经历。
哈哈哈,然后就是洧洧的碎碎念时间……
结对编程在个人编程的基础上加上了UI界面,而且我认为结对编程与个人编程相同的需求大概就是在小学、中学、和高中出题的要求上是一致的了,其余的需求都是全新的需求,于是我们在保留小学、中学和高中出题的代码上,增添了UI界面和计算结果这两个需求,并将其整合起来就成了我们结对编程项目的大概框架。
一开始由于个人编程的误导,因为个人编程里面是存储好指定几个人的信息,然后在此情况下,生成指定的个人难度的试卷,于是我们俩认为一开始会有个登录界面,并存储进相应的个人信息,比如啥名字,账号,密码之类的,再加上在群里面有人在问数据库怎么用,就更加加深了我们往这方面的想法,于是就感觉这次的个人编程好难呀,连数据库都用上了,但由于没有学过,我们先将这个放到了一边,做起了UI界面,想着最后再来考虑这个问题。再将第一步也就是登录界面完成后,我们俩看了看结对编程的需求,然后这才发现它的需求里面其实根本就没有什么登录的界面要求,不需要存储用户的数据在里面,这里步骤应该是短信发送验证码成功后,到设置密码,设置密码完成后就直接到了选择出题难度的界面了,然后就可以开始出题了,于是在这里我们得到了一个教训,看清楚需求到底是什么样的,不要自己想当然的增加需求,更不要因为别人的想法来左右自己的想法,这是我在这次结对编程里得到的第一个教训。
两个人编程肯定是分工合作,因此我俩一个人负责短信API那个一个人负责写每一部分的UI界面,然后将UI界面发送给她进行两部分的整合,然后由于有两个地方的注释有点模糊不清的原因,她理解错了,就造成了整合在一起之后的代码不能正常地发送短信,后来一看才发现加代码的地方加错了,于是这里又得到了一个教训,那就是注释写清楚,遇上模糊不清的时候还是要和小组成员进行讨论,不能自己去猜测到底是什么那内容。
这次结对编程中我收获到了许多经验和教训,1+1>2我也是深刻的体会到了,但这是在两人配合默契相辅相成的情况下的,也学到了许多原来不曾接触的东西,比如写一个UI界面,以及计算算是所需用到的后缀表达式,这都是我在这次结对编程学到的东西,而且感觉比以往学到的更深刻也更牢固。
结对编程ending-我和洧洧的碎碎念的更多相关文章
- 结对编程--基于android平台的黄金点游戏
游戏内容: 阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫“黄金点”的游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或1 ...
- 结对编程-地铁续(有种上个学期OO的既视感)
我们组比较特殊..三人结对 github:https://github.com/qingchanghan/WPFUI_Metro po一张照片: 石浩然,韩青长.陈彦吉 (台式机真的很高端,分屏贼帅) ...
- 结对编程项目——四则运算vs版
结对编程项目--四则运算vs版 1)小伙伴信息: 学号:130201238 赵莹 博客地址:点我进入 小伙伴的博客 2)实现的功能: 实现带有用户界面的四则运算:将原只能在 ...
- 关于软件工程结对编程作业 PairProject : Elevator Scheduler(电梯调度算法的实现与测试)的总结
1)结对编程队友 1106xxxx 张扬 1106xxxx 杨军 其中,此项目的编程实现主要由前者完成. 2)关于结对编程 结对编程的优点: 最直接的一点:在结对编程中,由于有另一个人在你身边和你配合 ...
- 结对编程—黄金点游戏WinForm单机版
本小游戏场景来自邹欣老师的<移山之道>一书: "阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫"黄金点"的游戏: ...
- Week4 结对编程
1.照片 1.1 结对编程参与者:李文涛.黎柏文 1.2 展示照片 2.结对编程的优点&缺点 2.1 优点 2.1.1.两人分工合作,减少了工作量 2.1.2.结对编程的伙伴往往能提供不同 ...
- 结对编程——关于Fault、Error、Failure程序设计
一.问题描述: 构造程序,分别是: •不能触发Fault •触发Fault,但是不能触发Error •触发Error,但是不能产生Fai ...
- GUI、模块化与结对编程(homework-03)
摘要: 在本次作业博客里,我将主要阐述作业3的收获.作业3表面是将之前的程序转换为图形界面(之前程序见http://www.cnblogs.com/shone/p/3348372.html),然而本质 ...
- BJDP结对编程活动
7月21日参与了 BJDP北京的活动 在北京首次参与能够参与动手编程活动,感觉挺不错的. 本次活动共有三项内容 1. 金锐分享单元测试的Mocking技术,20 mins 2. 伍 ...
随机推荐
- canvas与svg
canvas与svg都是用于在网页上绘制图形(位图). canvas是HTML5新出来的一个标签,用来定义一块画图的区域(canvas本身没有绘制能力),用JavaScript来画图,可以绘制路径.矩 ...
- week1总结
week1总结 1. 开发上线工具流程以及规范类 规范: css注释:/* Comment Text*/ Css嵌套选择器:请不要让嵌套选择器的深度超过 3 层! 再说一遍: 永远不要嵌套 ID 选择 ...
- 为 pip install 设置 socks5 代理
参考 How to use pip with socks proxy? 为 pip install 设置 socks5 代理 设置方法: pip install pysocks pip install ...
- php接口签名验证
在做一些api接口设计时候会遇到设置权限问题,比如我这个接口只有指定的用户才能访问. 很多时候api接口是属于无状态的,没办法获取session,就不能够用登录的机制去验证,那么 大概的思路是在请求包 ...
- echarts 角度渐变环形图心得
今天做了一个图,把自己的遇到的问题和体会记录一下,以防忘记 echarts地址 https://gallery.echartsjs.com/editor.html?c=xEPtLLmG4G 参考官网地 ...
- Unity3D|-XLua热更新用法的大致流程
xlua是由腾讯维护的一个开源项目,我们可以在github上下载这个开源项目并查看一些相关文档 官网:https://github.com/Tencent/xLua 配置文档:https://gith ...
- git删除文件夹
git rm 要删除的文件夹 -r -f git commit -m 'del config' git push 使用场景,删除test文件夹,本来在码云上,正常的文件夹右击会出现 ...
- grep 从文件内容中查找
grep -rin [查找目标] [查找范围] 例子:在当前目录下的文件内查找test字符串 grep -rin test ./
- go安装和开发工具安装
go适合做什么 l 服务端开发 l 分布式系统 l 网络编程 l 区块链开发 l 内存KV数据库,例如boltDB.levelDB l 云平台 一 go安装 官网:https://golang.goo ...
- JavaScript判断苹果 iPhone X Series 机型
原文链接: JavaScript 判断 iPhone X Series 机型 现状 iPhone X 底部是需要预留 34px 的安全距离,需要在代码中进行兼容. 现状对于 iPhone X 的判断基 ...