W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
對于一個(gè)復(fù)數(shù)對象,有些條件我們期望是真的。
舉例來說,如果笛卡爾坐標(biāo)系的標(biāo)志量被設(shè)置了,那么我們就期望real和imag的值是有效的,類似地,如果極坐標(biāo)系的標(biāo)志量被設(shè)置了,我們期望mag和theta也是有效的。最后,如果兩個(gè)標(biāo)志位都設(shè)置了的話,我們希望四個(gè)值是一致的,即他們應(yīng)該是以不同的表示方式表示相同的一個(gè)復(fù)數(shù)。
這樣的條件即為不變式,由于很顯而易見的原因他們是不變的——他們總是應(yīng)該為真。編寫幾乎沒有bug的高質(zhì)量代碼就是要指出你的類中那些是不變式,并讓改變他們成為不可能。
數(shù)據(jù)封裝的好處之一就是幫助保證不變式。第一部是通過將變量變?yōu)樗接袕亩柚共皇芗s束的訪問。然后更改對象的唯一辦法就是通過訪問函數(shù)和更改器了。如果我們檢查所所有的訪問函數(shù)和更改器并發(fā)現(xiàn)他們都能保證不變式不變,那么我們就可以證明一個(gè)不變式是不會(huì)被篡改的了。
在Complex 類中,我們列出對變量進(jìn)行賦值的函數(shù):
第二個(gè)構(gòu)造函數(shù)
calculateCartesian
calculatePolar
setCartesian
setPolar
在每一個(gè)函數(shù)中,很明顯他們能保持上面提到的不變性。這里我們需要小心一些。注意到我說的是“保持”不變性。這就意味著,如果這個(gè)不變式為真,那么當(dāng)這個(gè)函數(shù)被調(diào)用后仍然為真。
這樣的定義允許了兩處漏洞。首先在函數(shù)執(zhí)行過程中可能有不變式為假的情況,這是沒關(guān)系的,有些時(shí)候是不可避免的。只要不變式在函數(shù)執(zhí)行之后恢復(fù)即可。
另外一處漏洞是如果在函數(shù)執(zhí)行開始時(shí)不變式為真我們只需保持該不變性即可。如果開始執(zhí)行時(shí)部位真,所有都是徒勞了。如果不變式在某處被更改了,我們能做的一般來說就是檢測到出錯(cuò),打印錯(cuò)誤信息,然后退出。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: