2011-12-11 90 views

回答

26

理論上,受保護的屬性(變量)是面嚮對象語言中的反模式。如果只有子類需要訪問其超類的成員屬性,則將這些屬性本身定義爲私有,並創建受保護的訪問方法(getter和setter)。這種方法應用了「信息隱藏」的概念。還有一種替代解決方案:定義受保護的不可變(最終)成員屬性。

進一步閱讀:

+2

「正式」?? –

+2

@Oli Charlesworth:好吧,'正式'可能不是正確的名詞,如果我說'理論上',你會同意嗎? – home

17

我想,讓一切私人是一個反模式。通常類被用在一堆中,並且作爲一個整體代表被封裝的實體放置在單獨的包中。他們不需要隱藏彼此的某些東西,但是這個規則強制隱藏沒有很好的理由,越來越混亂,並有效地使風格變得更糟(據我所知)。同時,我們經常看到每隔包的類是公開的。我想這更糟糕,但checkstyle不檢查。

封裝不僅存在於課堂上,還有封裝,系統等。我認爲這些水平更重要。

4

允許訪問包簡化了包內的編程,並減少了樣板代碼。通常情況下,訪問只需要在包內。私有訪問迫使您創建大量幾乎無用的訪問方法。這實際上具有減少封裝和信息隱藏的作用,因爲類必須通過公共訪問器方法暴露內部數據/結構應用程序範圍,而不是僅僅打包範圍。默認的軟件包可見性也使得測試更容易,因爲測試類也位於相同的軟件包中(在測試目錄/樹中)。

相關問題