一、实验目标:
1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践。
二 、实验内容:
1)根据以下问题描述,练习结对编程(pair programming)实践;
2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
3)要求在结对编程工作期间,两人的角色至少切换 4 次;
4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
三、问题描述
**生命游戏**
生命游戏是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死亡的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。
游戏在一个类似于围棋棋盘一样的,可以无限延伸的二维方格网中进行。例如,设想每个方格中都可放置一个生命细胞,生命细胞只有两种状态:“生”或“死”。图中,用黑色的方格表示该细胞为“死”, 其它颜色表示该细胞为“生” 。
游戏开始时, 每个细胞可以随机地(或给定地)被设定为“生”或“死”之一的某个状态, 然后,再根据如下生存定律计算下一代每个细胞的状态:
每个细胞的状态由该细胞及周围 8 个细胞上一次的状态所决定;
如果一个细胞周围有 3 个细胞为生,则该细胞为生,即该细胞若原先为死则转为生,若原先为生则保持不变;
如果一个细胞周围有 2 个细胞为生,则该细胞的生死状态保持不变;
在其它情况下,该细胞为死,即该细胞若原先为生则转为死,若原先为死则保持不变。
四、初期设想与结对
1.敏捷开发和结对编程
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
结对编程技术是一个非常简单和直观的概念,能达到事半功倍的工作效果。但是,人与人之间的合作不是一件简单的事情——尤其当人们都早已习惯了独自工作的时候。实施结对编程技术将给软件项目的开发工作带来好处,只是这些好处必须经过缜密的思考和计划才能真正体现出来。而另一方面,两个有经验的人可能会发现配对编程里没有什么技能的转移,但是让他们在不同的抽象层次解决同一个问题会让他们更快地找到解决方案,而且错误更少。
2.结对情况
目标:生命游戏
仓库:https://www.github.com/localhost999/shengmingyouxi
组员博客:
沈傲凡:https://www.cnblogs.com/egoista/
赵林海:https://www.cnblogs.com/zlh13437/
3.课题讨论
1).代码规范
编写所用语言为Java:注释规范、文件名规范、声明规则、以及编程规则。
2).初期结论
生命游戏中的细胞依据周围情况进行生死的变化,将其存放与二维数组dot中,其有生死两种状态,故将dot设为一个boolean数组。用random库去随机初始化。为了更好的体验,我们去加深了一下swing界面编程的学习。对于核心算法的讨论,将在基础设计完后,更深入讨论。
3).设计思路
五.结对阶段
本次结对通过QQ进行了粗略的讨论,对项目的层次有了大致的结论,在开始的界面设计和xibaozt设计时,可以比较轻松的完成,对于window类,我和组员根据网上的swing教程和模板,设计了基础的界面与三个响应函数start,continue,stop。在算法上,经过我们的商量,为了思路清晰,将细胞的生死状态记录于二维数组state_one里,然后通过两层循环,进行判断,将细胞的状态与界面的黑白色相对应(show类实现),用count计数,进而完成更新。最后在main类里完成调用。
六.结果记录
七.实验小结
这次的实验,因为特殊的情况,只能简单的进行,但也让我对敏捷开发的逻辑性和协作性有了更深的了解,虽然结对需要我们对一个项目进行更多的讨论,有时还会有代码的矛盾,但应该有助于代码规范的执行。同时因为在家,我们的时间不定,所以代码的进度十分缓慢,但结果还是满意的。这次选择了较熟悉的java语言,但真正写的时候,有的地方依旧需要查阅资料,套模板,看来不一直写,还是很快就生疏了。