公立還是私人?
回答
基本上,是的,這是爲了防止人們擰東西。
封裝(信息隱藏)是您正在尋找的術語。
通過只向外界發佈最少的信息,您可以隨意更改內部數據。
例如,假設您將電話簿實現爲條目數組,並且不會隱藏該事實。然後
有人走來,寫代碼,搜索或操縱你的陣列沒有通過你的「正常」的界面去。這意味着,當你想要開始使用鏈表或其他更高效的數據結構時,它們的代碼將會中斷,因爲它使用了這些信息。
這就是你過錯發佈的信息,而不是他們使用它:-)
典型的例子是getter和setter方法。你可能會認爲你可以只露出溫度變量本身在一類,以便用戶可以只執行:
Location here = new Location();
int currTemp = here.temp;
但是,如果你想以後有從氣象局實際網絡刮信息每當你問溫度。如果你想封裝在放在首位的信息,主叫方也只是做:
int currTemp = here.getTemp();
,你可以儘可能多的,只要你想改變這種方法的實施。唯一必須保留的是API(函數名稱,參數,返回類型等)。
有趣的是,它不只是在代碼中。某些大公司會用文字說明如下:
此技術信息僅用於說明目的,可能會在將來的版本中更改。
允許他們提供客戶想要的東西(額外的信息),但不鎖定他們支持所有的永恆。
這是給任何人(你,別人)提供一個明確的代碼合同,他們正在使用你的對象......從「如何工作」中分離出「如何使用它」。這被稱爲Encapsulation。對於一個側面說明,至少在.NET上(可能在其他平臺上),對於真正想要訪問的人來說,要訪問對象的私有部分(使用反射),並不難。
主要的原因是你,庫開發,有保險,沒有人會使用你不希望你的代碼的部分必須保持。
每公共部分代碼可以的,難免會得到使用您的客戶。如果您後來發現您的設計實際上非常糟糕,並且版本2.0應該寫得更好,那麼您意識到您的付費客戶實際上希望您保留所有現有功能,並且您被鎖定以維持向後兼容性的價格製作更好的軟件。
通過使盡可能多的代碼儘可能私有的,你是毫無保留地宣佈,該代碼是無人能敵,並且你可以和將能夠在任何時間重寫。
這是爲了防止人們從事安全事務 - 但從安全角度來看,不是而是。
相反,它意在讓你的類的用戶只關心public
部分,讓你(作者)隨意修改實施(private
),而不必擔心破壞別人的代碼。例如,大多數編程語言似乎將String
s存儲爲char[]
(字符數組)。如果由於某種原因,人們發現節點的鏈接列表(每片含單個字符)表現較好,使用陣列內部實施可以被切換,而無需(理論上)斷裂使用String
類的任何代碼。
以計數器的典型示例。你夜總會的保鏢握住他的手,讓他的拳頭更難受,並計算進出俱樂部的人數。
現在事情是這樣定義的:
public class Counter{
private int count = 0;
public void increment()
{
count++;
}
public void decrement()
{
count--;
}
}
正如你所看到的,有沒有制定者/吸氣的數量,因爲我們不希望這個類的用戶(程序員),能夠調用myCounter.setCount(100),或者更糟myCounter.Count - = 10;因爲這不是什麼東西,對每個人來說都是一樣的,每個人都離開。
沒有爲這個有很多爭論的範圍。 例如......如果很多.Net Framework是私有的,那麼這會阻止開發人員搞砸事件,但同時它可以防止開發人員使用funcionality。
在我個人看來,我會優先考慮製作方法public。但我會建議使用Facade模式。簡而言之,您有一個封裝了複雜功能的類。例如,在.net框架中,WebClient是一個隱藏複雜http請求/響應邏輯的Facade。
還...保持簡單的類...你應該有一些公共的方法。這比具有大量的私有方法大班了更好的抽象
這是很有必要知道一個物體S「拼湊」怎麼也得看看這個視頻在YouTube上
http://www.youtube.com/watch?v=RcZAkBVNYTA&list=PL3FEE93A664B3B2E7&index=11&feature=plpp_video
- 1. 推送渠道:公共還是私人?
- 2. Xcode:複製標題:公開還是私人還是項目?
- 3. 檢查Instagram帳戶是公開還是私人的
- 4. 確定Facebook的帖子是公開的還是私人的ID?
- 5. 如何知道pdb文件是公共還是私人?
- 6. 模型類屬性應該是私人還是公共?
- 7. 這個功能應該是公共還是私人?
- 8. 吸氣劑和吸附劑是私人還是公用?
- 9. 私人公鑰是不同
- 10. 公共/私人
- 11. Android:AsyncTask建議:私人課還是公開課?
- 12. 課堂上的靜態地圖 - 公共還是私人?
- 13. Facebook圖形對象 - 公共還是私人?
- 14. 如何知道Liferay主題中的頁面是私人還是公共?
- 15. 如何查找,證書是私人證書還是公共證書
- 16. 搞清楚IP地址是公開還是私人用於廚師食譜
- 17. IBOulets和IBActions應該是私人的,內部的還是公開的3?
- 18. 應該複製構造函數是私人的還是公開的
- 19. OpenUDID是公共或私人的ios
- 20. 私人和公共財產
- 21. 改變公衆對私人
- 22. 公衆,保護私人
- 23. 私人與公共的typedef
- 24. 私人與公共繼承
- 25. 私人和公共職能
- 26. 推送私人或公共?
- 27. 私人/公共qt信號
- 28. 私人與公共港口
- 29. 私人和公共變量
- 30. std :: enable_shared_from_this;公共vs私人
很好的例子。即使你沒有開發一個庫,封裝也很有價值。 – 2012-02-21 22:46:15
希望我可以選擇這個問題的兩個答案,這個也很好 – 2012-02-21 22:48:25