软件工程实验二---结对编程
一、实验目标:
1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践
二、实验内容:
1)根据以下问题描述,练习结对编程(pair programming)实践;
2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求;
3)要求在结对编程工作期间,两人的角色至少切换 4 次;
4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
三、问题描述(二选一)
见第一阶段
四、实验过程
第一阶段
见上一次实验报告
第二阶段
1).代码规范
变量命名规范:使用驼峰式的命名方式,函数和变量以及类名使用简介且容易理解的英文名称
代码书写规范:需要正确的缩进,对于函数需要有简单易懂的注解;排版避免再一个语句里给多个变量赋值等
其他:参考阿里巴巴的Java代码约束
2).程序的总体设计
经过讨论之后确定总体设计分为如下几个模块,以及各个模块的关系如下:
- 初始化模块
- 界面模块
- 程序规则控制模块
- 刷新模块
3).结对编程过程
经过协商我们决定先写好程序的架构,以及完成初始化模块,界面模块的设计,然后再完成规则控制和刷新模块,并且在此期间参考了网上的文档。
初始化模块和GUI模块
初始化模块主要包括初始化随机数组,界面模块设计主要包括可获取行列,以及刷新频率等,还有显示地图信息。
五、实验结果
运行结果:当程序开始运行时,即开始运行,默认刷新频率为1s,长宽分别为50个格子
改变长宽:
代码如仓库中代码所示:仓库链接
代码如下
GUI代码块:
package test.lifeGame; import test.demo.extendsJPanel; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; //对于遇到的覆盖问题,可以使用多个JPanel试试能不能解决,实在不行其他控件只能放菜单栏 public class GUI extends JFrame { Thread thread; private final gameDemo game; private boolean GameStatus = false; private JButton jbuttonRun; private JLabel jlabelRows; private JTextField jtextRows; private JLabel jLabelCols; private JTextField jtextCols; private JLabel jLabelRate; private JTextField jtextRate; public GUI(){ game = new gameDemo(50,50);//可用像素:500 game.setBounds(0,0,450,450); thread = new Thread(game); thread.start(); add(game); } public void init(){ setTitle("生命游戏"); setBounds(200,150,700,540); getContentPane().setLayout(null); //设置Rate文本 jLabelRate = new JLabel("Rate:"); jLabelRate.setBounds(500,100,40,20); this.getContentPane().add(jLabelRate); jtextRate = new JTextField("1=>1s"); jtextRate.setBounds(540,100,60,20); this.getContentPane().add(jtextRate); //设置cols文本 jLabelCols = new JLabel("Cols:"); jLabelCols.setBounds(500,200,40,20); this.getContentPane().add(jLabelCols); jtextCols = new JTextField(); jtextCols.setBounds(540,200,60,20); this.getContentPane().add(jtextCols); //设置Rows文本 jlabelRows = new JLabel(); jlabelRows.setText("Rows:"); jlabelRows.setBounds(500,300,40,20); this.getContentPane().add(jlabelRows); jtextRows = new JTextField(); jtextRows.setBounds(540,300,60,20); this.getContentPane().add(jtextRows); //run按钮 jbuttonRun = new JButton("run"); jbuttonRun.setBounds(500,400,100,40); this.getContentPane().add(jbuttonRun); jbuttonRun.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //添加获取输入的代码,以及执行规则的代码,线程的暂停和重启 if(!GameStatus){ GameStatus=true; game.cancle(); jbuttonRun.setText("stop"); }else{ String col_st = jtextCols.getText(); String row_st = jtextRows.getText(); String rate_st = jtextRate.getText(); System.out.println("col:"+Integer.parseInt(col_st)+",row:"+Integer.parseInt(row_st)+",rate:"+Float.parseFloat(rate_st)); game.Start(); game.generationRandom(Integer.parseInt(col_st),Integer.parseInt(row_st)); game.setFrequenceRate(Float.parseFloat(rate_st)); GameStatus = false; jbuttonRun.setText("run"); } } }); } public static void main(String[] args) { GUI frame = new GUI(); frame.init(); frame.setVisible(true); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); } }
总结
经过了两个星期的结对编程实验,基本上掌握了结对编程的基本过程,在结对编程中,最让我感到受益的是在两个人讨论下解决问题的过程,在以往的编程活动中,往往只有自己一个人解决问题,有时即使解决了也感觉自己想的不够全面,但是在结对编程中,两个同时思考如何解决问题,互相讨论,不断完善对这个问题的理解,比仅仅解决这个问题收获更多。
来源:https://www.cnblogs.com/csLu/p/12598496.html