20155229实验三 《Java面向对象程序设计实验三 敏捷开发与XP实践 》实验报告

实验题目

1.在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能。

2.下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例

3.完成重构内容的练习,下载搭档的代码,至少进行三项重构

4.以结对的方式完成Java密码学相关内容的学习

实验步骤

(1)编码标准

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

本次实验题目如下:

public class CodeStandard {
public static void main(String [] args){
StringBuffer buffer = new StringBuffer();
buffer.append('S');
buffer.append("tringBuffer");
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));
}
}

在IDEA中使用工具Code->Reformate Code将上面的代码格式化后,得到的结果为:

然后再IDEA中,我还学到Code->Move Line UpCode -> Move Line Down能够将代码往上/下移动。

(2)添加单元测试用例

  • 搭档的Complex代码为:
/**

 * Created by Administrator on 2017/4/21.

 */
public class Complex {
    // 定义属性并生成getter,setter

    private double RealPart;
    private double ImagePart;

    public void setterRealPart(double realPart) {
        this.RealPart = realPart;
    }
    public void setterImagePart(double imagePart){
        this.ImagePart = imagePart;
    }
    public double getterRealPart(){
        return RealPart;
    }
    public double getterImagePart(){
        return ImagePart;
    }

    // 定义构造函数

    public Complex(){}
    public Complex(double R,double I){
        this.RealPart = R;
        this.ImagePart = I;
    }

    //Override Object

    public boolean equals(Object obj){
        if(this == obj){
            return true;
        }
        if(!(obj instanceof Complex)){
            return false;
        }
        Complex complex = (Complex) obj;
        if(getterRealPart()!=complex.getterRealPart()){
            return false;
        }
        if(getterImagePart()!=(complex.getterImagePart())){
            return false;
        }
        return true;
    }
    public String toString(){
        String s = new String(Double.toString(getterRealPart()));
        //  s.concat(Double.toString(getterRealPart()));

        if(getterImagePart()>0)
        s = s + '+';
        s = s + Double.toString(getterImagePart());
       // s.concat(Double.toString(getterImagePart()));

        s = s + 'i';
        return s;
    }

    // 定义公有方法:加减乘除

    Complex ComplexAdd(Complex a){
        Complex b = new Complex();
        b.ImagePart = this.ImagePart + a.ImagePart;
        b.RealPart = this.RealPart + a.RealPart;
        return b;
    }
    Complex ComplexSub(Complex a){
        Complex b = new Complex();
        b.ImagePart = this.ImagePart - a.ImagePart;
        b.RealPart = this.RealPart - a.RealPart;
        return b;
    }
    Complex ComplexMulti(Complex a){
        Complex b = new Complex();
        b.RealPart = this.RealPart * a.RealPart - this.ImagePart * a.ImagePart;
        b.ImagePart = this.RealPart * a.ImagePart + this.ImagePart * a.RealPart;
        return b;
    }
    Complex  ComplexDiv(Complex a) {
        Complex b = new Complex();
        b.RealPart = (this.RealPart * a.RealPart + this.ImagePart * a.ImagePart)/(a.RealPart*a.RealPart+a.ImagePart*a.ImagePart);
        b.ImagePart = (this.ImagePart * a.RealPart - this.RealPart * a.ImagePart)/(a.RealPart*a.RealPart+a.ImagePart*a.ImagePart);
        return b;
    }
}
  • ComplexTest代码为:

  • 添加单元测试用例后为:

  • git log的截图:

(3)重构

重构就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。

重构目标

  • 改进软件设计使软件更容易被理解
  • 帮你找到bug
  • 提高软件的开发速度

重构时机

  • 在添加新功能时进行重构。
  • 在修改bug时进行重构。
  • 在代码复审时进行重构。
  • 到了最后的交付期限,不进行重构

下载的搭档的代码为:

重构后的代码为:

(4)结对学习java密码学内容

上周学习了java关于密码学的内容,在此基础上本周和搭档结对继续学习

首先我们学习了娄老师给的凯撒密码的代码:

public static void main(String args[]) throws Exception{
String s=args[0];
        int key=Integer.parseInt(args[1]);
        String es="";
        for(int i=0;i<s.length( );i++)
{  char c=s.charAt(i);
               if(c>='a' && c<='z') // 是小写字母
                  { c+=key%26;  //移动key%26位
                    if(c<'a') c+=26;  //向左超界
                    if(c>'z') c-=26;  //向右超界
                  }
               else if(c>='A' && c<='Z') // 是大写字母
{  c+=key%26;
                    if(c<'A') c+=26;
                    if(c>'Z') c-=26;
                  }
               es+=c;
           }
       System.out.println(es);
     }

在此基础上,我们对该代码进行了改编,最后得到的代码为:

实验心得与体会

在本次实验中,首先了解了IDEA对代码特别方便的运用,这与虚拟机中的vim的命令是相似的;其次git colne了搭档的代码,在这过程中,最难完成的是,git后IDEA会出现各种错,且不太好解决,但实验二添加单元测试用例这是对上周学习的内容的复习。实验三让我了解了重构,重构在编写代码时能够使我们的代码更清晰,更简便。最后结对学习java密码学,这让我学到了结对学习的重要性,因为两个人会有不同的思路,这样能够筛选出好的思路进行编写代码。

我的PSP时间

步骤 耗时 百分比
需求分析 30分钟 18.75 %
设计 30分钟 18.75%
代码实现 60分钟 37.5%
测试 30分钟 18.75%
分析总结 10分钟 6.25%

参考资料

posted @ 2017-05-07 20:49  Fer_佳  阅读(183)  评论(0编辑  收藏  举报