zoukankan      html  css  js  c++  java
  • 20155238 《JAVA程序设计》实验三(敏捷开发与XP实践)实验报告

    实验内容

    • 敏捷开发与XP实践

      1. XP基础
      1. XP核心实践
      1. 相关工具

    实验要求

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

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

      1. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

    实验步骤与结果

    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));
    }
    }
    
    • 格式化

    • 使用Code菜单

    • 学习中的问题:很多Code菜单中的指令工具不知道是用来做什么的,通过在网上查找,基本解决。

    测试Complex代码

    • 搭档的Complex代码

    • 加入junit单元测试,并测试

    • git log

    重构代码

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

    • 重构的目标

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

    • 重构搭档代码

    • 学习中的问题:为什么要对程序进行重构

    解决:* 臃肿的类: 类之所以会臃肿,是因为开发者缺乏对最基本的编码原则,即“单一职责原则”(SRP)的理解。这些类往往会变得很臃肿,是由于不同的且在功能上缺少关联的方法都放在了相同的类里面。
    *长方法: 方法之所以会变得很长主要是有以下几个原因:
    许多没有关联性的、功能复杂的模块的代码都放在相同的方法内。这主要是开发者缺乏SRP的概念。
    多种条件都放在同一个方法内,这在长方法内经常会发生的。这是由于缺乏McCabe代码复杂度和SRP的概念的比较。

      * 大量的传参: 我经常遇到这几种情况,一些方法跟另一些方法进行交互,或者调用另一些方法的时候传入大量的参数。这就会出现如果更改了其中一个参数,就得在多个方法内进行更改。
    
      * 常量值无处不在: 经常会发现开发者(尤其是新手)会使用一些具有明确含义的常量值(主要是魔鬼数字),但没有给它们赋予合适的常量变量。这会降低代码的可读性和可理解性。
    

    模糊的方法名

    • 2.重构与设计的关系?

    • 解决:重构与设计是互补的,程序应该是先设计,而在开始编码后,设计上的不足可以用重构来弥补.设计应该是适度的设计,而不必过度的设计.如果能很容易的通过重构来适应需求的变化,那么就不必过度的设计,当需求改变时再重构代码.

    重构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为基本字符个数)

    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菜单的强大。学会了格式化代码。

    • 体会到了结对学习的好处。

    • 理解了什么是重构,对重构的条件和目标有了基本的了解,能对代码进行简单的重构。

  • 相关阅读:
    VS2008 Ajax Toolkit 控件(修正后转载)
    AD操作类[修改版]
    java中使用Rhino执行js文件中的function
    XSTL中单引号的问题
    [转]ADSearch User Property Attributes
    2008我的健身计划
    spring执行定时任务
    分页存储过程,支持多表查询,效率还行
    今天写一个读卡器程序,操作AD时的一个Exception:The authentication mechanism is unknown
    httpclient模拟windows认证
  • 原文地址:https://www.cnblogs.com/zjy072018/p/6816058.html
Copyright © 2011-2022 走看看