20172311 2017-2018-2 《程序设计与数据结构》实验三报告
Posted socialsea
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20172311 2017-2018-2 《程序设计与数据结构》实验三报告相关的知识,希望对你有一定的参考价值。
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:
结果提交截图:
实验最终代码链接:
本实验收获:
通过对本实验的学习了解到:
1.编写代码一个重要的认识是“程序大多时候是给人看的”,编程标准使代码更容易阅读和理解,甚至可以保证其中的错误更少。编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。
2.编码标准中的版式就是一个很好的例子,版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是程序风格的重要因素。
3.实现代码规范的工具有很多,alibaba就是一个很好用的工具。
4.关于代码标准,可以遵循以下原则:
敏捷开发与XP实践-2:
结果提交截图:
- 图一:
- 图二:
- 图三:
实验最终代码链接:
本实验收获
通过对本实验的学习了解到:
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.参考资料
以上是关于20172311 2017-2018-2 《程序设计与数据结构》实验三报告的主要内容,如果未能解决你的问题,请参考以下文章
20172311 2017-2018-2 《程序设计与数据结构》实验一报告
20172311 2017-2018-2 《程序设计与数据结构》实验五报告
20172311 2017-2018-2 《程序设计与数据结构》第九周学习总结
20172311 2017-2018-2 《程序设计与数据结构》第一周学习总结