簡體   English   中英

在OOP中,私人電影是私人的?

[英]In OOP, Private membes are private for who?

在OOP為什么需要把一些Private ,例如。 我知道任何私有成員都無法訪問,但具有相同的類對象。 但是為什么我需要這樣做而我是我項目中唯一的編碼器。 同樣的問題延伸到Protected ,受到保護!

privateprotected不是為了阻止其他程序員訪問類的內部,而是(也)防止自己創建沒有明確定義的接口的程序。

如果項目中的每個類都可以修改其他每個類,那么由於巨大的狀態空間,您不僅容易引入錯誤,而且還會阻止自己:

  • 更改任何類的實現(同時保持接口相同)。
  • 曾經介紹過任何不熟悉所有課程內部所有課程的人。 除非你有一個完美的記憶,並且可以背誦你曾經寫過的每一行代碼,包括未來你。
  • 模擬對象進行單元測試
  • 與您的程序/庫的其他版本交互。 假設您確實更改了一個類的內部,並設法跟蹤項目中對該內部屬性的每個引用。 即便如此,您可能需要再次與舊版本的程序進行交互。 如果使用屬性而不是getter / setter方法,這將變得特別困難。

訪問修飾符實現兩個不同的東西:

  1. 它們限制了可能導致副作用的代碼量,從而更容易建立不變量。

  2. 它們保護類的客戶端免受內部表示的更改。

對於小型項目,這些優勢可能不會立即顯現,特別是對於初學者。

保護您未來的自我,否則可能會意外地忘記對象的哪些部分是應該與系統的其余部分分離的細節,以及哪些部分是系統其余部分可以依賴的可靠接口。

語言試圖強迫你,寫出“好”的代碼。 “好”意味着代碼結構清晰,不易出錯。 所以你必須聲明類型,私有成員等。 如果你不想那樣,你可以使用這方面較少的語言,比如python。 但這意味着,你的程序可能(可能!)更不安全,或者如果它變得非常大,容易誤解。 它和評論一樣。 你不必寫它們。 特別是當你是唯一的程序員時。 但這是一個很好的風格,如果你在半年內再次閱讀你的課程,你會非常感激。

您將類的成員標記為private ,不能從類外部訪問。 例如,您使用它來隱藏實現細節,因此您可以更改實現,而不會影響使用您的類的其他代碼。 隱藏實現細節是OOP(封裝)的關鍵方面之一。 如果您創建了一個Car類,然后編寫了大量使用Car類的代碼,並且您突然意識到您的實現執行得非常糟糕,並且您需要重構它,如果所有Car實現細節都是私有的Car class,你知道使用Car的代碼都沒有訪問這些東西,你可以隨意更改它們。 如果你沒有將它們標記為private ,那么你可能已經在其他代碼中使用了其中一些代碼,然后這些代碼就會破壞。

類似地, protected (在Java中,無論如何)是出於同樣的目的,但允許從您的類派生的類訪問這些成員。 這是相當弱的保護,因為它當然意味着您不能在不影響派生類的情況下更改基類的實現細節。

以這種方式思考:保護級別定義了您可以在以后更改的內容,而不必關心除此類之外的任何其他代碼(私有),除了此類之外的任何其他代碼段以及從此類繼承的每個類(受保護)並且除了使用這個類(公共)的每一段代碼之外,不需要關心任何其他代碼。

privateprotected來自封裝概念。 它來自數據隱藏概念。 我相信這種介紹至少對我來說是明確和有用的:

封裝是將數據和函數組合成一個稱為類的單元的過程。 使用封裝方法,程序員無法直接訪問數據。 只能通過類中存在的函數訪問數據。 數據封裝導致了數據隱藏的重要概念。 數據隱藏是對用戶隱藏的類的實現細節。 限制訪問的概念使程序員編寫專門的函數或方法來對隱藏的類成員執行操作。 必須注意確保課程設計正確。 Sripriya Rajagopalan

注意:答案很好,這個答案就是完成它們

如果將類的成員(變量或方法)定義為私有,則無法使用其他類,使用點運算符從外部使用它。 受保護可幫助您保護成員變量或方法不被繼承。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM