防禦性程式設計

2021-08-30 12:37:18 字數 1266 閱讀 5757

1,防禦性程式設計。必要時應當考慮採取保護性拷貝的手段來保護內部的私有資料,先來看下面這個例子:

pubic final class period

public date getstart()

public date getend()

}這個類存在兩個不安全的地方,首先來看第乙個攻擊**

date start = new date();

date end = new date();

period p = new period(start, end);

end.setyear(78);//改變p的內部資料!

這是因為外部和內部引用了同樣的資料,為了解決這個問題,應當修改period的建構函式:

public period(date start, date end)

這樣內部的私有資料就與外部物件指向不同,則不會被外部改變

再來看第二個攻擊**:

date start = new date();

date end = new date();

period p = new period(start, end);

p.getend().setyear(78);//改變p的內部資料!

這很顯然是由於公有方法暴露了內部私有資料,我們可以只返回內部私有資料的唯讀版本(即其乙份拷貝)

public date getstart()

public date getend()

2,讀到上面這個例子,我想起來了下面這樣的**片段

public class suit

public string tostring()

public int compareto(object o)

public static final suit clubs = new suit("clubs");

public static final suit diamonds = new suit("diamonds");

public static final suit hearts = new suit("hearts");

public static final suit spades = new suit("spades");

private static final suit private_values = ;

public static final list values = collections.unmodifiedlist(arrays.aslist(private_values));

}出處:    

防禦性程式設計

2010 6 29 30 斷言 斷言是乙個肯定的語句。在程式執行過程中只要斷言恒為真,程式就正確。斷言條件只能包含不會修改程式狀態的測試條件。assert 條件 包含在標頭檔案 中。ifdef ndebug define assert condition void 0 else void asser...

《Windows核心程式設計》 防禦性程式設計 斷言

防禦性程式設計是提高軟體質量技術的有益輔助手段,它的主要思想是 子程式應該不因傳入錯誤資料而被破壞,哪怕是由其他子程式產生的錯誤資料。防禦性程式設計關鍵在於嚴格的輸入檢查 預期的錯誤處理方法。下面介紹使用斷言來進行防禦性程式設計。斷言通常是乙個例程 routine 或乙個巨集 macros 斷言通常...

《Windows核心程式設計》 防禦性程式設計 斷言

防禦性程式設計是提高軟體質量技術的有益輔助手段,它的主要思想是 子程式應該不因傳入錯誤資料而被破壞,哪怕是由其他子程式產生的錯誤資料。防禦性程式設計關鍵在於嚴格的輸入檢查 預期的錯誤處理方法。下面介紹使用斷言來進行防禦性程式設計。斷言通常是乙個例程 routine 或乙個巨集 macros 斷言通常...