我正在研究StringTokenizer.java
班,並且出現了幾個想到的問題。關於公共方法的私人方法
我注意到其他類使用的公共方法調用了一些完成所有工作的私有方法。現在,我知道OOD的原則之一就是儘可能多地隱私並隱藏所有的實現細節。我不確定我完全理解這背後的邏輯。
我知道將字段設置爲私有是非常重要的,以防止將無效值存儲在其中(只是其中一個原因)。但是,談到私人方法時,我不確定他們爲什麼如此重要。
例如,在StringTokenizer
類的情況下,我們不能只是將所有的實現代碼放在公共方法中嗎?由於這些方法的API(即調用這些公共方法的規則)將保持不變,它將如何改變使用這些方法的類?我能想出爲什麼私有方法有用的唯一原因是因爲它可以幫助您避免重複編寫代碼。例如,如果所有的公共方法都做了同樣的事情,那麼你可以聲明一個私有方法來完成這個任務,並且可以被公共方法使用。
其他問題,與公共方法相比,用私有方法編寫實現有什麼好處?
這裏是一個小例子:
public class Sum{
private int sum(int a, int b){
return a+b;
}
public int getSum(int a, int b){
return sum(a,b);
}
}
Vs的...
public class Sum{
public int getSum(int a, int b){
return a+b;
}
}
是怎樣的第一個樣本更有益?
我不明白你的意思。如果我錯過了一些東西,請原諒我。我說:「所以擁有一個私有方法總是很好,因爲你知道改變它沒有問題,即使你可以安全地向該方法添加更多參數」。但是,面向客戶端的公共API仍然是一樣的。所以你寫了一個公共方法中的所有邏輯,或者在其中調用一個函數,或者做任何查看公共API的客戶端都沒有觀察到任何差異的東西。實現中的代碼仍然可以在任何時間點更改,這與改變私有函數的合同/實現一樣好 – Saurabh
@saury在這種特殊情況下,是的,它是相同的API,但您仍然不能保證它未來會保持不變。根據我自己的經驗,我可以從「哦,讓我們直接公開這個想法」這個想法爲您提供建議,如果將來我們需要它私人化,我們會改變它「最終發生的事情是這樣的方法從來沒有成爲私有的,所以它最好是在開始時有一點過度體系結構,而不是稍後再做一個巨大的重構。 –
如果一個公共方法調用了「沒有問題」更改的私有方法,那麼公共方法是否會中斷呢?如果是這樣,在「安全地改變」任何事物方面沒有任何區別。無論你改變什麼都必須進行測試 - 使其公開/私人不會給你任何額外的安全性。 – gented