实验二 结对编程(阶段二)
一、实验目标
1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践。
二 、实验内容
1)根据以下问题描述,练习结对编程(pair programming)实践;
2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
3)要求在结对编程工作期间,两人的角色至少切换 4 次;
4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
三.实验过程
- 使用二维数组存储一个20*20的表格
- 数组中用1代表活着状态,0代表死亡状态
- 每个细胞在页面中用 span 表示,以颜色区别不同状态
- 当需要绘制下一个图形时,深度拷贝当前数组,计算每一个细胞周围存活数量,再计算下一代当前细胞的状态。
- 给 span 的父元素绑定 click 事件,用到拖动改变细胞的状态, 对span自定义属性 data-cellx 和 data-celly 存放当前坐标。
四.程序实现
package com.cisco.gendwang;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class LifeGame extends JFrame
{
private final World world;
public LifeGame(int rows, int columns)
{
world = new World(rows, columns);
new Thread(world).start();
add(world);
}
public static void main(String[] args)
{
LifeGame frame = new LifeGame(40, 50);
JMenuBar menu = new JMenuBar();
frame.setJMenuBar(menu);
JMenu options = new JMenu("Options");
menu.add(options);
JMenuItem arrow = options.add("Arrow");
arrow.addActionListener(frame.new ArrowActionListener());
JMenuItem square = options.add("Square");
square.addActionListener(frame.new SquareActionListener());
JMenu help = new JMenu("Help");
menu.add(help);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1007, 859);
frame.setTitle("Game of Life");
frame.setVisible(true);
frame.setResizable(false);
}
class ArrowActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
world.setArrow();
}
}
class SquareActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
world.setSquare();
}
}
}
五.运行结果
六.github地址
https://github.com/cheng-xiang-star/cheng.git
实验小结
从前写代码都是一个人的事,数据结构和算法包括给函数命名都比较随意,为了方便自己的理解,遵循自己的规则就好。但结对编程需要两个人的智慧,一边沟通一边编写。在约定用什么样的数据结构,什么样的算法,什么样的接口,甚至函数命名都需要两人共同交流完成,虽然过程繁琐,但程序的准确性提高了。一些容易犯的编写错误,经过两个人的检查,也更容易被发现和指出。虽然看似效率不如以前一个人编写时高,但是实际上代码结构更加清晰,出现bug的几率也更小了。总的来说,除了比较累,这样的编程方式还是很优秀的。