当前位置:首页 > 后端 > java > 正文内容

Java实验报告(实验三)

内容图文

 

一、实验内容

1. XP基础

2. XP核心实践

3. 相关工具

4.结对同学:20159205 石宇婷

Blog网址:http://home.cnblogs.com/u/20159205syt/

 

二、实验步骤

(一)敏捷开发与XP

(1)含义:是一种以人为核心、迭代、循序渐进的开发方法。

(2)模式:XP,TDD,CI,FDD,BDD,SCRUM,Feature Team,Domain Model,Extract Activities,Refactor,Pair Programming,Feature list/Product Backlog.

(3)极限编程(eXtreme Programming,XP) 是一种全新而快捷的软件开发方法。

(4)XP准则:沟通,简单,反馈,勇气。

(5)XP活动:编码,测试,倾听,设计。

 

(二)编码标准

1、包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。

2、Eclipse中的快捷键使用:

Ctrl+Shift+F或菜单中的source->Format,使代码按Eclipse规定的规范缩进。

初始代码:

package cc.openhome;
import java.lang.string; 
public class pracJDB {
public static void main(String args) {
StringBuffer buffer = new StringBuffer();
buffer.append(‘s‘);
buffer.append("trignBuffer");
System.out.println(buffer.charAt(1));
System.out.println(buffer.capacity());
System.out.println(buffer.indexOf("tring"));
System.out.println("buffer=" + buffer.toString());
if (buffer.capacity() < 20)
buffer.append("1234567");
for (int i = 0; i < buffer.length(); i++)
System.out.println(buffer.charAt(i));
}
}

用Format格式后的代码:

package cc.openhome;

import java.lang.String;

public class pracJDB {
	public static void main(String args) {
		StringBuffer buffer = new StringBuffer();
		buffer.append(‘s‘);
		buffer.append("trignBuffer");
		System.out.println(buffer.charAt(1));
		System.out.println(buffer.capacity());
		System.out.println(buffer.indexOf("tring"));
		System.out.println("buffer=" + buffer.toString());
		if (buffer.capacity() < 20)
			buffer.append("1234567");
		for (int i = 0; i < buffer.length(); i++)
			System.out.println(buffer.charAt(i));
	}
}

 

(三)结对编程

1、分为:驾驶员(Driver)是控制键盘输入的人。

领航员(Navigator)起到领航、提醒的作用。

2、驾驶员:写设计文档,进行编码和单元测试等XP开发流程。

   领航员:审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否需要和如何重构;帮助驾驶员解决具体的技术问题。

 

(四)版本控制

1、版本控制提供项目级的 undo(撤销) 功能。

2、版本控制允许多人在同一代码上工作, 只要遵守一定的控制原则就行。

3、版本控制系统保存了过去所作的修改的历史记录。

4、版本控制系统还支持在主线上开发的同时发布多个软件版本。

5、版本控制也是项目级的时间机器,你可以选择任何一个时间, 精确地查看项目在当时的情况。

6、流行的版本控制工具有CVS,SVN,git等。

7、实验楼中的git服务:

(1)公开的代码仓库:shiyanlou_cs212

(2)启动实验时,会自动执行git pull,获取课程仓库中的最新代码,存放于/home/shiyanlou/Code目录。

(3)进入到实验环境中修改代码,完成后需要依次执行下述命令即可提交:

$ cd /home/shiyanlou/Code/shiyanlou_cs212

# 修改代码文件

# 添加修改文件

$ git add 所有修改的文件

# 提交到环境中本地代码仓库

$ git commit -m ‘本次修改的描述‘

# push到git.shiyanlou.com,无需输入密码

$ git push

技术分享

git实验部分我做过,但是由于网速很慢重新刷新时无法再打开,事先没有截图,望老师见谅。

 

 (4)克隆其他用户代码仓库只需要知道对方的仓库链接,我们鼓励在别人代码基础上修改:

$ git clone http://git.shiyanlou.com/[对方的专属用户名]/[课程代码仓库名]

(5)输入git status:查看代码状态;

     出现未跟踪的文件,使用git add <file>...:以包含要提交的内容;

     使用git commit:git将依据索引库中的内容来进行文件的提交;

     使用git push:把代码保存到远程托管服务器中。

 

(五)重构(Refactor)

1、概念:重构是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更。

2、重构的第一项功能---Rename

可以给类、包、方法、变量改名字。

修改方法:用鼠标单击要改的名字,选择Eclipse中菜单中的Refactor->Rename...

初始代码:

技术分享

对此代码进行重构:

技术分享

重构后的代码:

技术分享

3、重构的第二项功能---封装

原始程序为:

技术分享

选择需要封装的变量s.name,点击Refactor->Encapsulate Field:

技术分享

用同样的方法封装age和id,得到如下代码:

技术分享

技术分享

使用Eclipse中Source->Generate toString(),给Student类产生一个toString方法,得到代码:

 

技术分享

技术分享

4、修改代码的目的:

增加新功能,原有功能有BUG,改善原有程序的结构,优化原有系统的性能。

5、有Bad Smell的代码需要重构:

重复代码(Duplicated Code),过长方法,过长参数列,条件逻辑过度复杂,分支语句,基本类型迷恋,数据泥团。

6、重构的完整流程:

(1)从版本控制系统代码库中Check out code;

(2)读懂代码(包括测试代码);

(3)发现bad smell;

(4)Refactoring;

(5)运行所有的Unit Tests;

(6)往代码库中Check in code;

(六)实践项目

编写小游戏:连连看。

结对同学:20159205 石宇婷

Blog网址:http://www.cnblogs.com/20159205syt/

1、实验步骤:

       我们两个首先选取一个游戏进行需求分析,尝试用TDD思想编写测试代码与产品代码,参考网上现有资料,完成游戏的实现。

2、连连看代码:

            
            
            
            
            
            
            
            
            
            
            
            
            
    JButton diamondsButton[][] =  JButton[][];
    JButton exitButton, resetButton, newlyButton; 
    JLabel fractionLable =  JLabel(); 
    JButton firstButton, secondButton;  grid[][] = [][]; boolean pressInformation = ;  x0 = , y0 = , x = , y = , firstMsg = , secondMsg = , validateLV;  i, j, k, n;=  JFrame(== = =  GridLayout(,  ( cols = ; cols < ; cols++ ( rows = ; rows < ; rows++=  JButton(String.valueOf(grid[cols + ][rows + =  JButton(=  JButton(=  JButton(, , ,  ( twins = ; twins <= ; twins++= () (Math.random() *  +  ( alike = ; alike <= ; alike++= () (Math.random() *  + = () (Math.random() *  +  (grid[cols][rows] != = () (Math.random() *  + = () (Math.random() *  + .grid[cols][rows] =+  save[] = [ n =  grid[][] = [][ ( i = ; i <= ; i++ ( j = ; j <= ; j++ (.grid[i][j] != = ++= n - .grid = (n >= = () (Math.random() *  + = () (Math.random() *  +  (grid[cols][rows] != = () (Math.random() *  + = () (Math.random() *  + .grid[cols][rows] =--= ;  ( i = ; i < ; i++ ( j = ; j < ; j++ (grid[i + ][j + ] ==  estimateEven( placeX,  (pressInformation == ===== ======== (firstMsg == secondMsg && secondButton != xiao() {  ((x0 == x && (y0 == y +  || y0 == y - ))|| ((x0 == x +  || x0 == x - ) && (y0 == y))) {  (j = ; j < ; j++ (grid[x0][j] == ) {  (y > j) {  (i = y - ; i >= j; i--) {  (grid[x][i] != = =  (k ==  (y < j) {  (i = y + ; i <= j; i++) {  (grid[x][i] != = =  (k ==  (y == (k ==  (x0 == (x0 < (n = x0; n <= x - ; n++ (grid[n][j] != =  (grid[n][j] ==  && n == x -  (x0 > (n = x0; n >= x + ; n-- (grid[n][j] != =  (grid[n][j] ==  && n == x +  (i = ; i < ; i++) {  (grid[i][y0] ==  (x > (j = x - ; j >= i; j-- (grid[j][y] != = =  (k ==  (x < (j = x + ; j <= i; j++ (grid[j][y] != = =  (k ==  (x == (k ==  (y0 == (y0 < (n = y0; n <= y - ; n++ (grid[i][n] != =  (grid[i][n] ==  && n == y -  (y0 > (n = y0; n >= y + ; n-- (grid[i][n] != =  (grid[i][n] ==  && n == y +  (y0 > j) {  (i = y0 - ; i >= j; i--) {  (grid[x0][i] != = =  (y0 < j) {  (i = y0 + ; i <= j; i++ (grid[x0][i] != = =  (x0 > (j = x0 - ; j >= i; j-- (grid[j][y0] != = =  (x0 < (j = x0 + ; j <= i; j++ (grid[j][y0] != = = = = = =  (e.getSource() == grid[][] = [][.grid ==  (e.getSource() == (e.getSource() == ( cols = ; cols < ; cols++ ( rows = ; rows < ; rows++ (e.getSource() ==+ , rows + =
 (七)实验中遇到的问题和解决方法
    1、对vi命令并不熟悉,尤其是不清楚如何退回命令行
  解决方法:由于实验一也遇到同样问题,所以可以查看实验一报告中遇到的问题和解决方案
    (1)首先按下字母i切换至插入模式(Insert mode)开始编辑文件;
    (2)退出vi及保存文件:文件编辑完之后,按esc键或Ctrl+o切换至命令行模式,在按ZZ保存原文件并退出。
 
  2、我的电脑用的eclipse6.5版本,在重构编译toString函数时,在Eclipse中找不到Source->Generate toString()没办法给Student类产生一个toString方法。

    解决方法:在多次尝试失败后只好借用同学电脑完成这项工作,在自己电脑上手动编写了这段代码。
  
 
(八)实验收获体会
  这次实验内容比较复杂,还有一个团队实践项目要求完成一个小型游戏,做起来花了较长的时间。

  前半部分是自己实验,学习敏捷开发与XP、编码标准、版本控制和重构。由于学校网速太慢,实验楼经常断线,所以实验花了挺长时间。这部分知识比较难的是使用版本控制中的git功能,在vim中返回命令行界面时遇到困难,这个问题在实验一中出现过,返回自己博客园查看当时的记录,找到按下Ctrl+o,再输入ZZ退出输入模式返回命令行的方法,调试过后可以顺利进行后面的实验。通过这次实验我发现了及时总结问题的好处,同时发现要经常重温以前实验问题体会,以免知识的遗忘。其次,我印象最深的是重构,通过运用好重构可以大大提升我们编写代码的质量,让这个代码具有可读性、可改性、可用性。这是值得我们以后编程中要学以致用的地方。

  后半部分是编写一个java小游戏,和石宇婷两人借鉴了网上连连看代码,一起分析这个代码中语句的功能,发现这个程序用到我们没学过的窗体程序设计等方面知识,所以阅读起来有一定的困难。也让我意识到自己的编程能力还需要很大的提升。


扫描二维码推送至手机访问。

版权声明:本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:luxd@aliyun.com,感谢支持理解。


本文链接:https://luxd.cc/post/181.html

“Java实验报告(实验三)” 的相关文章

30分钟带你精通Git使用

30分钟带你精通Git使用

一、 版本控制工具1.1. 什么是版本控制系统?版本控制系统(Version Control System):是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制。常见的版本控制系统有:cvs、sv...

Java 基础 - 面向对象

Java 基础 - 面向对象

三大特性# 封装利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。用户无需知道对象内部的细节,但可以通过对象对外提供的接口来访问该对象。优点:减少耦合: 可以独立地开发、测试...

Tomcat 安装与配置

Tomcat 安装与配置

Tomcat是Apache 软件基金会(Apache Software Foundation)核心项目之一,支持最新的Servlet 和JSP 规范。因为Tomcat 技术先进、性能稳定,而且免费,成为目前比较流行的Web 应用服务器。Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,...

为IntelliJ IDEA安装插件

为IntelliJ IDEA安装插件

1. 安装插件插件是开发工具的扩展程序,通常由第三方提供,当安装了插件后,原开发工作的菜单、按钮等开发环境可能会发生变化,例如出现了新的菜单项,或出现了新的按钮,甚至一些全新的编码方式,通常,使用插件可以使得开发某些代码或实现某些功能时更加简便。绝大部分的插件的安装方式都是相同的,另有一部分插件在安...

IDEA-配置可视化数据库视图

IDEA-配置可视化数据库视图

IDEA-配置可视化数据库视图[MustVIP]...