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

课程:《程序设计与数据结构》
班级: 1723
姓名: 赵晓海
学号:20172311
实验教师:王志强
实验日期:2018年5月27日
必修/选修: 必修


1.实验内容

(1)代码规范

http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA

参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECCODESTANDARD 安装alibaba 插件,解决代码中的规范问题。

在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能。提交截图,加上自己学号水印。

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

(2)协同测试

在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add . ; git commit -m "自己学号 添加内容";git push;

提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。

(3)重构

http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA

完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。

(4)密码学应用

参考 http://www.cnblogs.com/rocedu/p/6683948.html,以结对的方式完成Java密码学相关内容的学习,结合重构,git,代码标准。
提交学习成果码云链接和代表性成果截图,要有学号水印。


2.实验过程及结果

敏捷开发与XP实践-1:

结果提交截图:

实验最终代码链接:

CodeStandard.java

本实验收获:

通过对本实验的学习了解到:
1.编写代码一个重要的认识是“程序大多时候是给人看的”,编程标准使代码更容易阅读和理解,甚至可以保证其中的错误更少。编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。
2.编码标准中的版式就是一个很好的例子,版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是程序风格的重要因素。
3.实现代码规范的工具有很多,alibaba就是一个很好用的工具。
4.关于代码标准,可以遵循以下原则:


敏捷开发与XP实践-2:

结果提交截图:
  • 图一:
  • 图二:
  • 图三:
实验最终代码链接:

队友Complex类码云链接
测试代码码云链接

本实验收获

通过对本实验的学习了解到:
1.结对编程是XP中的重要实践,XP的集体所有制意味着每个人都对所有的代码负责;这一点,反过来又意味着每个人都可以更改代码的任意部分。结对编程对这一实践贡献良多:借由在不同的结对中工作,所有的程序员都能看到完全的代码。集体所有制的一个主要优势是提升了开发程序的速度,因为一旦代码中出现错误,任何程序员都能修正它。这意味着代码要放到一个大家都能方便获取的地方,我们叫代码仓库。这引出另外一个话题叫版本控制(Version Control)
2.不论是对于团队还是个体,版本控制都提供了很多好处

  • 版本控制提供项目级的 undo(撤销) 功能。
  • 版本控制允许多人在同一代码上工作,只要遵守一定的控制原则就行。
  • 版本控制系统保存了过去所作的修改的历史记录
  • 版本控制系统还支持在主线上开发的同时发布多个软件版本。在软件发布的时候不需要整个团队的停止工作,不需要冻结代码。
  • 版本控制也是项目级的时间机器,你可以选择任何一个时间, 精确地查看项目在当时的情况。

敏捷开发与XP实践-3:

结果提交截图:
  • 图一:

  • 图二:

  • 图三:

实验最终代码链接:

结对伙伴的ReadingMaterial.java的代码链接
重构之后的代码链接
2.
结对伙伴的DVD.java的代码连接
重构之后的代码连接
3.
结对伙伴的MonetaryCoin.java的代码链接
重构之后的代码链接

本实验收获:

通过学习本实验了解到:
重构的概念:
1.重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。
2.重构中一个非常关键的前提就是“不改变软件外部行为”,它保证了我们在重构原有系统的同时,不会为原系统带来新的BUG,以确保重构的安全。如何保证不改变软件外部行为?重构后的代码要能通过单元测试。如何使其更加易于阅读、易于维护和易于变更?设计模式给出了重构的目标。
3.重构的动机:

  • 增加新功能

  • 原有功能有BUG

  • 改善原有程序的结构

  • 优化原有系统的性能

    4.一个完整的重构流程包括:
    
  • 从版本控制系统代码库中Check out code

  • 读懂代码(包括测试代码)

  • 发现bad smell

  • Refactoring

  • 运行所有的Unit Tests

  • 往代码库中Check in code
    5.哪些地方需要重构?有臭味道(Bad Smell)的代码。Bad Smell与相应的重构手法如下表所示:


敏捷开发与XP实践-4:

结果提交截图:
  • 图一:凯撒加密(参数设置 )

  • 图二:Java对称加密-DES算法(加密)

  • 图三:**Java对称加密-DES算法(解密) **

  • 图四:Java非对称加密-RSA算法

  • 图五:AB之间使用密钥协定创建共享密钥(A方)

  • 图六:AB之间使用密钥协定创建共享密钥(B方)

  • 图七:Java摘要算法- MD5

实验最终代码链接:

各种加密算法代码链接1
模拟使用密钥协定创建共享密钥的另一部分

本实验收获:

通过对本实验的学习了解到:
1.密码学: 主要是研究保密通信和信息保密的学科, 包括信息保密传输和信息加密存储等。
2.密码学并不是孤立存在的,它需要有一个环境——保密通信模型。用保密通信模型来诠释这种信息传送方式, 如下图所示:

3.根据密钥的使用方法, 可以将密码分为对称密码和公钥密码两种。
对称密码(symmetriccryptography)是指在加密和解密时使用同一密钥的方式。
公钥密码(public-keycryptography)则是指在加密和解密时使用不同密钥的方式,公钥密码又称为非对称密码(asymmetric cryptography)。
将对称密码和公钥密码结合起来的密码方式称为混合密码系统(hybridcryptosystem),这种系统结合了对称密码和公钥密码两者的优势。

  • 混合密码系统加密:

  • 混合密码系统解密:


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

  • 问题:使用IDEA运行凯撒加密代码时出现如下错误:

  • 出错原因:对代码的使用目的和使用方式不清楚,没有设置加密的内容和参数。

  • 修改过后的运行结果如下:


4.感想

唯有坚持,才能有希望!JAVA的学习之路是漫长的!唯有坚持,才能进步!才有机会接触到更多的知识!JAVA的应用太广泛,可以用来编写让人头疼的加密和解密代码!!

5.参考资料

posted on 2018-05-29 17:23  socialsea  阅读(197)  评论(2编辑  收藏  举报