结对编程ending-我和洧洧的碎碎念

时间:2023-03-08 17:01:44

  应该是第一次和队友分工合作去完成一个项目,其中也经历了跳进不少坑又被拉回来的过程,总体来说这对于我俩也的确是值得纪念的一次经历。 

 

 我的碎碎念时间…… 


  对比个人项目和结对编程项目二者需求,前者重在面对不同对象生成题目到文本,而后者涉及的方面就更多。除了可以复用个人项目生成题目这一模块之外,项目还有很多难点需要攻破,并且在完成项目过程中也遇到了各种各样的问题:

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界面,以及计算算是所需用到的后缀表达式,这都是我在这次结对编程学到的东西,而且感觉比以往学到的更深刻也更牢固。