20155237 《JAVA程序设计》实验三(敏捷开发与XP实践)实验报告

20155237 《JAVA程序设计》实验三(敏捷开发与XP实践)实验报告

实验内容

  • 敏捷开发与XP实践
    • XP基础
    • XP核心实践
    • 相关工具

实验要求

1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程

2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导

实验步骤与结果

Code工具的使用

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

测试Complex代码

重构代码

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

  • 重构的目标
    1.改进软件设计使软件更容易被理解
    2.帮你找到bug
    3.提高软件的开发速度

  • 重构搭档代码

重构java密码学代码

凯撒密码

  • 加密过程

  • 明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里k1=k2,不妨记为k)。凯撒密码的加密过程可记为如下一个变换:
    c≡m+k mod n (其中n为基本字符个数)

同样,解密过程可表示为:
m≡c+k mod n (其中n为基本字符个数)c≡m+k mod n (其中n为基本字符个数)

同样,解密过程可表示为:
m≡c+k mod n (其中n为基本字符个数)

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);
     }
  • 合作完成重构
public class Caesar {
    public static void main(String args[]) throws Exception{
        String s=args[0];
        int key=Integer.parseInt(args[1]);
        String es="";*/
import java.util.Scanner;
public class Caesar {
    private String table; // 定义密钥字母表
    private int key; // 定义密钥key
    public Caesar(String table, int key) {
        // 根据不同的字母表和不同的密钥生成一个新的凯撒算法,达到通用的目的
        super();
        this.table = table;
        this.key = key;
    }//重构参数部分
        /*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;
        }*/
        public String encrypt(String from) {
            //凯撒加密算法,传入明文字符串,返回一个密文字符串
            String to = "";
            for (int i = 0; i < from.length(); i++) {
                to += table.charAt((table.indexOf(from.charAt(i))+key)%table.length());
            }
            return to;
        }//重构算法部分
        /*System.out.println(es);
    }
}*/
        public static void main(String[] args) {
            int key;
            System.out.println("请输入要加密的字符串");
            Scanner scanner = new Scanner(System.in);
            String str =scanner.nextLine();
            System.out.println("请输入密钥");
            key=scanner.nextInt();
            Caesar caeser = new  Caesar("abcdefghijklmnopqrstuvwxyz", key);
            String result = caeser.encrypt(str);
            System.out.print(result);
        }
}

PSP(Personal Software Process)时间

步骤 耗时 百分比
需求分析 20min 16%
设计 20min 16%
代码实现 30min 24%
测试 25min 20%
分析总结 30min 24%

分析与总结

通过本次试验,对于编写和编译代码有了新的认识。深一步的学会了IDEA的使用方法。基本了解了Code菜单的强大。学会了格式化代码,体会到了结对学习的好处,理解了什么是重构,对重构的条件和目标有了基本的了解,能对代码进行简单的重构。

posted @ 2017-05-07 15:22  方自晨  阅读(148)  评论(0编辑  收藏  举报