極限編程(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% |