W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
對(duì)于一個(gè)復(fù)數(shù)對(duì)象,有些條件我們期望是真的。
舉例來(lái)說(shuō),如果笛卡爾坐標(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ù)封裝的好處之一就是幫助保證不變式。第一部是通過(guò)將變量變?yōu)樗接袕亩柚共皇芗s束的訪問(wèn)。然后更改對(duì)象的唯一辦法就是通過(guò)訪問(wèn)函數(shù)和更改器了。如果我們檢查所所有的訪問(wèn)函數(shù)和更改器并發(fā)現(xiàn)他們都能保證不變式不變,那么我們就可以證明一個(gè)不變式是不會(huì)被篡改的了。
在Complex 類中,我們列出對(duì)變量進(jìn)行賦值的函數(shù):
第二個(gè)構(gòu)造函數(shù)
calculateCartesian
calculatePolar
setCartesian
setPolar
在每一個(gè)函數(shù)中,很明顯他們能保持上面提到的不變性。這里我們需要小心一些。注意到我說(shuō)的是“保持”不變性。這就意味著,如果這個(gè)不變式為真,那么當(dāng)這個(gè)函數(shù)被調(diào)用后仍然為真。
這樣的定義允許了兩處漏洞。首先在函數(shù)執(zhí)行過(guò)程中可能有不變式為假的情況,這是沒關(guān)系的,有些時(shí)候是不可避免的。只要不變式在函數(shù)執(zhí)行之后恢復(fù)即可。
另外一處漏洞是如果在函數(shù)執(zhí)行開始時(shí)不變式為真我們只需保持該不變性即可。如果開始執(zhí)行時(shí)部位真,所有都是徒勞了。如果不變式在某處被更改了,我們能做的一般來(lái)說(shuō)就是檢測(cè)到出錯(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)系方式:
更多建議: