极限编程(Extreme Programming,XP)是一种全新而快捷的软件开发方法。XP团队使用现场客户、特殊计划方法和持续测试来提供快速的反馈和全面的交流:html
XP软件开发的基石是XP的活动,包括:编码、测试、倾听、设计。java
实验内容:安装alibaba 插件,解决代码中的规范问题。在IDEA中使用工具把下面代码从新格式化,再研究一下Code菜单,找出一项让本身感受最好用的功能。提交截图,加上本身学号水印。git
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)); } }
编程标准使代码更容易阅读和理解。编程标准包含:具备说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。算法
Settings ->Plugins -> Browse repositories...
安装alibaba编码规约扫描
Code->Rename
重写方法Code->Comment with Line Comment
此行改为注释Code->Comment with Block Comment
此行添加注释,这也是我比较喜欢的一个快捷键了(Ctrl+Shift+)实验内容:在码云上把本身的学习搭档加入本身的项目中,确认搭档的项目加入本身后,下载搭档实验二的Complex代码,加入很多于三个JUnit单元测试用例。编程
mkdir 5312Anna
新建文件夹以方便区分git clone 搭档码云连接
链接到搭档码云,这样就能够畅快寻找搭档代码了import junit.framework.TestCase; import org.junit.Test; public class ComTest extends TestCase { Com c1 = new Com(1,1); Com c2 = new Com(0,-1); Com c3 = new Com(-1,1); @Test public void testgetRealPart() throws Exception { assertEquals(1.1, new Com().setA(1.1)); assertEquals(0.-1, new Com().setA(0.-1)); assertEquals(-1.1, new Com().setA(-1.1)); } @Test public void testgetImagePart() throws Exception { assertEquals(1.1, new Com().setB(1.1)); assertEquals(0.-1, new Com().setB(0.-1)); assertEquals(-1.1, new Com().setB(-1.1)); } @Test public void testComAdd() throws Exception { assertEquals("1.0", c1.ComAdd(c2).toString()); assertEquals("0.0+2.0i", c1.ComAdd(c3).toString()); assertEquals("-1.0", c2.ComAdd(c3).toString()); } @Test public void testComSub() throws Exception { assertEquals("-1.0 -2.0i", c1.ComMinus(c2).toString()); assertEquals("-2.0", c1.ComMinus(c3).toString()); assertEquals("-1.0+2.0i", c2.ComMinus(c3).toString()); } }
git push
git log ComTest.java
经常使用使用方法:安全
refactor->Rename
给类、包、方法、变量更名字refactor->Encapsulate Field
封装Source->Generate toString()
toString()方法refactor->Extract Method
提炼出重复的代码重构后代码网络
class studentdark { private int num; private String name; private int java; public int getNum() { return num; } @Override public String toString() { return "studentdark{" + "num=" + num + ", name='" + name + '\'' + ", java=" + java + '}'; } public void setNum(int num) { this.num = num; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getJava() { return java; } public void setJava(int java) { this.java = java; } } public class studentdarkTest { public static void main(String[] args) { studentdark student = new studentdark(); student.setName("caoge"); student.setNum(5312); student.setJava(94); System.out.println("学号为"+ student.getNum() +",姓名为"+ student.getName() +"java成绩为"+ student.getJava()); } }
密码学包括密码编码学(Cryptography) 和密码分析学(Cryptanalyst) 两个分支。app
Java安全体系结构总共分为4个部分:框架
咱们小组结合正在学习《密码学》中的DES算法,以及认真阅读娄老师博客 Java密码学算法,了解到“DES”是目前最经常使用的对称加密算法,但安全性较差。针对DES安全性的改进产生了能知足当前安全须要的TripleDES算法,即“DESede”。决定实现TripleDES算法,在老师范例代码上作了调整。ide
编程思路:
(1) 获取密钥生成器KeyGenerator kg=KeyGenerator.getInstance("DESede");
Java中KeyGenerator类中提供了建立对称密钥的方法。KeyGenerator类预约义了一个静态方法getInstance( ),方法getInstance( )的参数为字符串类型,指定加密算法的名称。
(2) 初始化密钥生成器kg.init(168);
该步骤通常指定密钥的长度。咱们写的是“DESede”,则能够是112或168位,其中112位有效。
(3) 生成密钥SecretKey k=kg.generateKey( );
密钥可用于之后的加密和解密。
(4) 经过对象序列化方式将密钥保存在文件中
FileOutputStream f=new FileOutputStream("key1.dat"); ObjectOutputStream b=new ObjectOutputStream(f); b.writeObject(k);
ObjectOutputStream类中提供的writeObject方法能够将对象序列化,以流的方式进行处理。这里将文件输出流做为参数传递给ObjectOutputStream类的构造器,这样建立好的密钥将保存在文件key1.data中。
(5) 从文件中获取密钥
FileInputStream f=new FileInputStream("key1.dat"); ObjectInputStream b=new ObjectInputStream(f); Key k=(Key)b.readObject( );
(6) 建立密码器
Cipher cp=Cipher.getInstance("DESede");
KeyGenerCipher类是一个工厂类,它不是经过new方法建立对象,而是经过其中预约义的一个静态方法getInstance( )获取Cipher对象。getInstance( )方法的参数是一个字符串,该字符串给出Cipher对象应该执行哪些操做。
(7) 初始化密码器
cp.init(Cipher.ENCRYPT_MODE, k);
该方法包括两个参数,第一个参数指定密码器准备进行加密仍是解密,若传入Cipher.ENCRYPT_MODE则进入加密模式。第二个参数则传入加密或解密所使用的密钥,即第1步从文件中读取的密钥对象k。
(8) 获取等待加密的明文
String s="Hello World!"; byte ptext[]=s.getBytes("UTF8");
(9) 执行加密
byte ctext[]=cp.doFinal(ptext);
(10) 处理加密结果
FileOutputStream f2=new FileOutputStream("SEnc.dat"); f2.write(ctext);
这里将加密结果保存在文件Senc.dat中。
加密结果:
密钥相同,解密与加密过程相似,解密结果:
再一次的结对学习让咱们的默契度再次增长,更加有默契。将密码学学习的内容与java相结合,更一步锻炼了本身的能力。
步骤 | 耗时/h | 百分比 |
---|---|---|
需求分析 | 0.5 | 10% |
设计 | 1 | 20% |
代码实现 | 2 | 40% |
测试 | 0.5 | 10% |
分析总结 | 1 | 20% |