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密码学相关内容的学习。
- 凯撒密码
重构后
- DES算法
码云地址:https://gitee.com/CS-IMIS-23/fwq20172303_Programming/tree/master/src/week10/ExperimentalLesson/DES
文件key1.dat中生成的密钥
- RSA加密
码云地址:https://gitee.com/CS-IMIS-23/fwq20172303_Programming/tree/master/src/week10/ExperimentalLesson/RSA
加密后
解密后
- DH
码云地址:https://gitee.com/CS-IMIS-23/fwq20172303_Programming/tree/master/src/week10/ExperimentalLesson/DH
- MD5算法
码云地址:https://gitee.com/CS-IMIS-23/fwq20172303_Programming/blob/master/src/week10/ExperimentalLesson/DigestPass.java
实验过程中遇到的问题和解决过程
- 问题1:如何在IDEA里看git的commit信息?
- 问题1解决方法:在IDEA的下标栏中选择
Verison Control
,之后点击log
即可。
其他(感悟、思考等)
本周学习了很多很重要的新内容——重构、代码规范和密码学相关内容的代码实现,因为本学期选修了密码科技史这门选修,所以密码学里的很多内容都是了解的,看起来做起来就相对没那么难。而代码规范是我觉得本次实验学的最有意义的事情,对于一个强迫症来说,有一个东西能帮我把代码的编写规范好真是太太太太太太太太棒了!!!!!!!!!