20172303 2017-2018-2 《程序设计与数据结构》实验三报告

20172303 2017-2018-2 《程序设计与数据结构》实验三报告

  • 课程:《程序设计与数据结构》
  • 班级: 1723
  • 姓名: 范雯琪
  • 学号:20172303
  • 实验教师:王志强
  • 助教:张旭升/刘伟康
  • 实验日期:2018年5月10日
  • 必修/选修: 必修

实验内容

敏捷开发与XP实践

  • 1.安装alibaba程序并运行,解决代码规范
  • 2.复习JUnit单元测试
  • 3.使用编码规范扫描规范结对伙伴的代码
  • 4.结合重构与结对伙伴共同学习密码学相关内容

实验过程及结果

(一)代码规范

要求:参考IDEA 简易教程安装alibaba 插件,解决代码中的规范问题。

1.安装alibaba插件

打开IDEA,在任务栏中打开Settings → Plugins → Browse repositories。在界面的搜素栏中alibaba,找到Alibaba Java Code Guidelines插件,点击Install进行安装。

2.代码规范:使用编码规范扫描对老师所给代码进行规范。

原代码:

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));
}
}

修改后代码:

public class CodeStandard {
    public static void main(String[] args) {
        final int maxcapacity = 20;
        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() < maxcapacity) {
            buffer.append("1234567");
        }
        for (int i = 0; i < buffer.length(); i++) {
            System.out.println(buffer.charAt(i));
        }
    }
}

3.在IDEA中使用工具(Code->Reformate Code)把代码重新格式化,并研究一下Code菜单。

IDEA的Code菜单如下:

常用功能总结:

  • Override Methods:重载基本类的方法。
  • Implement Methods:完成当前类中接口的方法。
  • Surround With:使用if-else、try-catch、do-while等包装代码段。
  • Comment with Line Comment/Comment with Block Comment:将选定代码变为注释或将选定注释重新变为代码。
  • Reformat Code:使代码按标准格式缩进。

(二)JUnit测试

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

  • 搭档的Complex代码:
  • 进行JUnit单元测试,共测试了四个方法:ComplexAdd(),ComplexSub(),ComplexMulti(),ComplexDiv().
  • 测试代码:

(三)重构练习

要求:完成重构内容的练习,下载搭档的代码,至少进行三项重构。

  • 重构(Refactor):指程序员对已有程序在尽量不改变接口的前提下,进行重新编写代码的工作。
  • Java代码的重构模式主要有三种:重命名方法重构模式、引入解释性变量重构模式、以查询取代临时变量重构模式
    • 重命名方法重构模式建议执行如下的步骤来完成:
      1.建立一个具有新名称的方法
      2.将旧方法的方法体复制进新方法
      3.讲旧方法的方法体修改为调用新方法
      4.将所有引用旧方法的地方修改为引用新方法
      5.删除旧方法
    • 引入解释性变量重构模式步骤相对简单,如下:
      1.声明一个局部变量,并将其初始化为需要替换的表达式部分
      2.对于复杂的表达式,用新的局部变量代替其中需要替换的部分
      3.对于该表达式的其他部分,重复这个过程
    • 以查询取代临时变量重构模式的步骤如下:
      1.找出只赋值了一次的局部变量
      2.将该局部变量声明为final并重新编译(以确保该变量的确只赋值了一次)
      3.复制赋值语句的等号右侧的表达式,并将其修改为一个新方法的方法体
      4.将赋值语句的等号右侧更改为对新方法的调用
      5.将所有对该局部变量的使用替换为对新方法的调用
      6.删除赋值语句以及局部变量的声明
  • 搭档原代码:
import java.util.Scanner;
public class Pig { public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int a = 1;
        int MaxPig = 10;
        int Pig;
        System.out.println("prprpr!");
        System.out.println("噗噗噗噗!!!!");
        System.out.println("bulabula");
        if (a>1) a--;
        System.out.println("请你输入一只Pig的大小:");
        Pig = scan.nextInt();
        if(Pig>MaxPig) System.out.println("你这只猪太大啦!!!!!");
        else System.out.println("你这只猪刚刚好!!!!!"); }
}
  • 修改后:

(四)密码学相关

要求:参考Java 密码学算法,结合重构,以结对的方式完成Java密码学相关内容的学习。

实验过程中遇到的问题和解决过程

  • 问题1:如何在IDEA里看git的commit信息?
  • 问题1解决方法:在IDEA的下标栏中选择Verison Control,之后点击log即可。

其他(感悟、思考等)

本周学习了很多很重要的新内容——重构、代码规范和密码学相关内容的代码实现,因为本学期选修了密码科技史这门选修,所以密码学里的很多内容都是了解的,看起来做起来就相对没那么难。而代码规范是我觉得本次实验学的最有意义的事情,对于一个强迫症来说,有一个东西能帮我把代码的编写规范好真是太太太太太太太太棒了!!!!!!!!!

参考资料

posted @ 2018-05-29 16:10  框框框  阅读(319)  评论(0编辑  收藏  举报