[英]In OOP, Private membes are private for who?
在OOP為什么需要把一些Private
,例如。 我知道任何私有成員都無法訪問,但具有相同的類對象。 但是為什么我需要這樣做而我是我項目中唯一的編碼器。 同樣的問題延伸到Protected
,受到保護!
private
和protected
不是為了阻止其他程序員訪問類的內部,而是(也)防止自己創建沒有明確定義的接口的程序。
如果項目中的每個類都可以修改其他每個類,那么由於巨大的狀態空間,您不僅容易引入錯誤,而且還會阻止自己:
訪問修飾符實現兩個不同的東西:
它們限制了可能導致副作用的代碼量,從而更容易建立不變量。
它們保護類的客戶端免受內部表示的更改。
對於小型項目,這些優勢可能不會立即顯現,特別是對於初學者。
保護您未來的自我,否則可能會意外地忘記對象的哪些部分是應該與系統的其余部分分離的細節,以及哪些部分是系統其余部分可以依賴的可靠接口。
語言試圖強迫你,寫出“好”的代碼。 “好”意味着代碼結構清晰,不易出錯。 所以你必須聲明類型,私有成員等。 如果你不想那樣,你可以使用這方面較少的語言,比如python。 但這意味着,你的程序可能(可能!)更不安全,或者如果它變得非常大,容易誤解。 它和評論一樣。 你不必寫它們。 特別是當你是唯一的程序員時。 但這是一個很好的風格,如果你在半年內再次閱讀你的課程,你會非常感激。
您將類的成員標記為private
,不能從類外部訪問。 例如,您使用它來隱藏實現細節,因此您可以更改實現,而不會影響使用您的類的其他代碼。 隱藏實現細節是OOP(封裝)的關鍵方面之一。 如果您創建了一個Car
類,然后編寫了大量使用Car
類的代碼,並且您突然意識到您的實現執行得非常糟糕,並且您需要重構它,如果所有Car
實現細節都是私有的Car
class,你知道使用Car
的代碼都沒有訪問這些東西,你可以隨意更改它們。 如果你沒有將它們標記為private
,那么你可能已經在其他代碼中使用了其中一些代碼,然后這些代碼就會破壞。
類似地, protected
(在Java中,無論如何)是出於同樣的目的,但允許從您的類派生的類訪問這些成員。 這是相當弱的保護,因為它當然意味着您不能在不影響派生類的情況下更改基類的實現細節。
以這種方式思考:保護級別定義了您可以在以后更改的內容,而不必關心除此類之外的任何其他代碼(私有),除了此類之外的任何其他代碼段以及從此類繼承的每個類(受保護)並且除了使用這個類(公共)的每一段代碼之外,不需要關心任何其他代碼。
private
或protected
來自封裝概念。 它來自數據隱藏概念。 我相信這種介紹至少對我來說是明確和有用的:
封裝是將數據和函數組合成一個稱為類的單元的過程。 使用封裝方法,程序員無法直接訪問數據。 只能通過類中存在的函數訪問數據。 數據封裝導致了數據隱藏的重要概念。 數據隱藏是對用戶隱藏的類的實現細節。 限制訪問的概念使程序員編寫專門的函數或方法來對隱藏的類成員執行操作。 必須注意確保課程設計正確。 ( Sripriya Rajagopalan )
注意:答案很好,這個答案就是完成它們
如果將類的成員(變量或方法)定義為私有,則無法使用其他類,使用點運算符從外部使用它。 受保護可幫助您保護成員變量或方法不被繼承。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.