博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20172303 2017-2018-2 《程序设计与数据结构》实验三报告
阅读量:6848 次
发布时间:2019-06-26

本文共 3377 字,大约阅读时间需要 11 分钟。

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.代码规范:使用编码规范扫描对老师所给代码进行规范。

1332969-20180529232718759-328370877.png

原代码:

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菜单如下:

1332969-20180529232732203-657610803.png
常用功能总结:

  • 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代码:
    1332969-20180529232930486-214126301.png
  • 进行JUnit单元测试,共测试了四个方法:ComplexAdd(),ComplexSub(),ComplexMulti(),ComplexDiv().
  • 测试代码:
    1332969-20180529232950294-287965257.png

(三)重构练习

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

  • 重构(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("你这只猪刚刚好!!!!!"); }}
  • 修改后:
    1332969-20180529233012267-696648321.png

(四)密码学相关

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

  • 凯撒密码
    1332969-20180529233043227-1619400264.png
    1332969-20180529233029924-162186322.png
    重构后
    1332969-20180529233111835-1143259418.png
  • DES算法
    码云地址:
    文件key1.dat中生成的密钥
    1332969-20180529233332965-994789631.png
  • RSA加密
    码云地址:
    加密后
    1332969-20180529233540709-1214296181.png
    解密后
    1332969-20180529233555935-149199835.png
  • DH
    码云地址:
    1332969-20180529233640716-1566194422.png
  • MD5算法
    码云地址:
    1332969-20180529233706690-776119980.png

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

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

其他(感悟、思考等)

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

参考资料

转载于:https://www.cnblogs.com/PFrame/p/9105587.html

你可能感兴趣的文章
(Access denied for user 'root'@'localhost' (using password: NO))
查看>>
设计模式
查看>>
Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析
查看>>
Linux系统中安装软件的几种方式
查看>>
LeetCode-Guess Number Higher or Lower
查看>>
scala:可变长参数和:_*符号
查看>>
洛谷P2568 GCD(莫比乌斯反演)
查看>>
linux运维 技能 2018
查看>>
notification的使用
查看>>
sql server的两个类型转换函数
查看>>
js定时器setInterval()与setTimeout()
查看>>
python基础===修改idle的输入风格
查看>>
Jmeter===参数化
查看>>
Webview访问移动网络的两种方法
查看>>
GIT与SVN的区别
查看>>
scala模式匹配详细解析
查看>>
CSS动画之过渡模块
查看>>
斯特林数
查看>>
css-实现元素垂直居中对齐
查看>>
mysql添加外键语句
查看>>