[英]data hiding is encapsulation, but not all encapsulation is data hiding
我已閱讀了近100多個鏈接,並探討了所有關於SO的問題但是:(仍然無法理解
數據隱藏和封裝之間的區別
在閱讀這個答案時,我讀了這一行
數據隱藏是封裝,但並非所有封裝都是數據隱藏
所以經過一番巨大的研究,我發現了這一點
1)數據隱藏是通過封裝實現的,或者它是一種封裝形式(Am I Right)?
2)如果是,應用訪問說明符是數據隱藏(和封裝也是如此)但是什么是僅封裝但不是數據隱藏的機制?
1)數據隱藏可以在沒有封裝的情況下實現,其中一個示例是類中的私有常量,並且任何“getter”都不返回該常量。
2)應用訪問修飾符可能是數據隱藏和封裝。 在公開數據時,您可以實現封裝,但不能實現數據隱藏,但只能由getter和setter修改。
數據隱藏和封裝是完全不同的事情,但相關的概念。 數據隱藏不會泄露任何類用戶的實現細節,而封裝可防止對數據進行意外更改。
我發現的最好的解釋是在“測試引導的面向對象增長系統”一書中(第49頁)
作者所說的是封裝幾乎總是一件好事,但數據隱藏可能在錯誤的地方,並且它們給出了以下示例:
以上兩種聲音都是明智的,直到我們從數據隱藏的角度來看它們
在緩存的示例中,隱藏它是有意義的。 但是關於應用程序日志文件名,隱藏它是沒有意義的。
Abstaction
重點關注重要方面並隱藏背景/實施細節
重點關注對象的外部視圖示例:Stack類[Abstaction專注於類Push,Pop提供的服務]
封裝
信息隱藏
封裝是決定將對象的哪些狀態和行為放在一起的決定而信息隱藏是決定要向用戶顯示哪些封裝的項目以及哪些不被重新分配給用戶
封裝隱藏了復雜性 。 就像我們正在創造吸氣劑和定型器..
但是數據隱藏意味着隱藏某些內容而在java中我們可以使用訪問修飾符來完成,即
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.