20172303 2017-2018-2 《程序设计与数据结构》实验三报告
- 课程:《程序设计与数据结构》
- 班级: 1723
- 姓名: 范雯琪
- 学号:20172303
- 实验教师:王志强
- 助教:张旭升/刘伟康
- 实验日期:2018年5月10日
- 必修/选修: 必修
实验内容
敏捷开发与XP实践
- 1.安装alibaba程序并运行,解决代码规范
- 2.复习JUnit单元测试
- 3.使用
编码规范扫描
规范结对伙伴的代码 - 4.结合重构与结对伙伴共同学习密码学相关内容
实验过程及结果
(一)代码规范
要求:参考安装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
修改后代码:
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密码学相关内容的学习。
- 凯撒密码 重构后
- DES算法 码云地址: 文件key1.dat中生成的密钥
- RSA加密 码云地址: 加密后 解密后
- DH 码云地址:
- MD5算法 码云地址:
实验过程中遇到的问题和解决过程
- 问题1:如何在IDEA里看git的commit信息?
- 问题1解决方法:在IDEA的下标栏中选择
Verison Control
,之后点击log
即可。
其他(感悟、思考等)
本周学习了很多很重要的新内容——重构、代码规范和密码学相关内容的代码实现,因为本学期选修了密码科技史这门选修,所以密码学里的很多内容都是了解的,看起来做起来就相对没那么难。而代码规范是我觉得本次实验学的最有意义的事情,对于一个强迫症来说,有一个东西能帮我把代码的编写规范好真是太太太太太太太太棒了!!!!!!!!!