java 实验三 实验报告
实验内容
代码规范
不规范的代码可能妨碍阅读,在粘贴下来老师在云班课中设置的提交点一的代码之后,我首先使用了IDEA中Code选项卡的Reformat Code功能规范代码的格式
然后,我下载了alibaba插件,对代码的规范进行进一步的学习。首先这段代码中没有包含关于作者的注释信息
然后,添加我的学号作为author的注释信息,再在for循环的括号里把直接使用的数字(“魔法值”)改成了赋了值的变量
再进行编码规约扫描,不建议使用行注释,遂改之
对于Code菜单,我觉得Generate是一个很方便的功能,可以直接生成重写方法还有构造方法的框架,用快捷键Alt+Insert十分方便
最后,这是第一个检查点提交的截图:
结对
此部分,首先我和搭档贾普涵同学互相地把对方加为自己项目的……管理员,对,就是管理员:
然后在IDEA中下载下来他的项目,找到上次实验的Complex代码
在测试代码中添加测试用例:
通过测试的结果:
下面的截图下方是搭档的项目的Git log ,包含了我添加测试用例后进行提交的提交记录
重构
通过老师的博客,我了解到重构是指在不改变软件外部行为的基础上,改变软件的内部结构,使软件更加易于阅读、易于维护、易于变更。
重构的内容包括对于不规范的变量名进行重新命名,提炼出代码中重复的功能,修改过长的方法以及参数列,将复杂的逻辑条件式分解等等内容。
我搭档的代码可以说都非常合乎规范,几经阅读之后,我决定对搭档第六周课下测试的CPU代码进行重构,当然在重构之前我现学现卖地在程序中添加了@author的注释信息:
最开始的代码我忘记截图了,下面只好一部分一部分地说明我重构搭档的这个程序的过程。
首先CPU的属性speed这里原来没有使用private修饰speed的名字是s
变量的属性是友好型的可以直接用圆点使用这个变量就像C语言中的结构体,但是程序中有setSpeed和getSpeed两个方法,所以说在这里将变量的属性设为友好型是不合乎封装的要求的。另外最初的变量s应当是CPU的速度属性,这个名字并不“清晰”。在这两个地方进行了重构,将变量的属性设为private,把s的名字改为speed,下面是修改之后的结果
下一处能够进行重构的地方是重写的equals和toString方法,在上面增加@Override
然后,就没有特别可以重构的地方了,这是第三个检查点的截图
结对学习Java密码学相关内容
对称加密算法-DES
Triple-DES是DES算法的改进,相比DES安全性得到了提高。获取密钥生成器传入的字符串参数是“DESede”,这样程序就知道我们用的是Triple-DES算法。并且还需要注意的是
- 密钥的保存方式可以有两种。或者是将密钥以对象序列化的方式保存在文件中此时文件中保存的是对象,ObjectOutputStream类中提供的writeObject方法可以将对象序列化,以流的方式进行处理。这里将文件输出流作为参数传递给ObjectOutputStream类的构造器,这样创建好的密钥将保存在文件key1.data中。或者以字节形式写入到文件中,首先创建文件输出流对象给其指定目的文件也就是我们保存密钥的文件,然后调用文件输出流的write方法,并将参数指定为存有密钥内容的字节数组,就可以把字节数组中的密钥内容以字节的形式写入到目的文件中。前者操作起来相对方便,后者能够通过字节数组更直观的将密钥中的内容打印出来。在我们学习的老师的示例中,这两种办法前后是衔接到一起的,第一个先用对象序列化的方式把密钥存进文件key1.dat中。但是这样虽然存进去了密钥,我们不知道它的内容。但是用后一种办法就可以,创建一个文件输入流,输入流的源是刚才生成的文件。创建输入流成功之后将其作为参数传给新建的对象输入流对象输入流就可以读取刚才对象序列化的密钥文件,使用的是对象输入流的readObject方法返回一个Object对象。再将其强制类型转换为Key类,这样新建的Key类的对象就能够调用getEncode方法把密钥的内容传入字节数组中,通过输出字节数组就可以输出查看密钥。
单向散列函数MD5算法
最开始的时候,我们编写代码时忘记用类方法getInstance创建对象,希望直接使用构造器new MessageDigest() 创建对象。这样并不合乎要求,IDEA为了纠正错误自动
在我们的程序中添加了内部类重写了MessageDigest对象protected的方法,发生这张图片的问题
所以一定要记住这个“工厂类”创建新对象的方法。
修改为getInstance
输入20165204and20165207经MD5算法计算后得到下图输出结果
学习成果
对称加密算法DES
非对称加密算法RSA
单向散列函数算法MD5
Git log 截图
这里有几个地方是我和搭档分工之后,提交的时候我们忘记了pull,所以有几个merge操作才提交上去,以后我们一定注意。