java面對對象入門(6)-封裝與抽象你搞清楚了嗎?

你們中的大多數人都同意封裝和抽象在一起會帶來很多混亂。大多數博客只會進一步增加混亂。讓我們解決這個難題。
在上一篇文章“ 理解java中的抽象 ”之後,我開始撰寫這篇文章。我的目標是瞭解Java中的封裝及其與抽象的關係。一開始,我就開始陷入前所未有的混亂之中。在瀏覽了多個小時並閱讀了一些寫得很好以及令人困惑的博客條目之後,我能夠做出一些清晰的理解。下面跟隨我的足跡。

1.簡單的封裝

將類中的數據和方法與實現隱藏(通過訪問控制)結合起來通常稱爲封裝。結果是具有特徵和行爲的數據類型。封裝本質上既有信息隱藏又有實現隱藏。

2.詳細封裝

我在某個地方讀到: “無論發生什麼變化,都要封裝它”。它被引用爲著名的設計原則。對於任何類中的這一問題,在運行時數據中可能發生變化,而在將來的版本中實現的變化也可能發生。因此,封裝適用於兩者,即數據和實施。
訪問控制或實現隱藏將邊界置於數據類型或類中,這有兩個重要原因。首先是確定客戶端程序員可以使用和不能使用的內容。這直接導致第二個原因,那就是將接口與實現分開。
如果您確定客戶端程序員除了將消息發送到公共接口之外什麼也不能做,那麼您可以自由更改不公開的任何內容(例如,程序包訪問,受保護或私有),而不會破壞客戶端代碼。封裝可以幫助您實現這一保證。

3.封裝與抽象

如果您瀏覽了我的上一篇文章,您將看到抽象本質上是一個觀點,這有助於設置準則。封裝是我們實現所需抽象的機制。
簡而言之,從OOAD的角度來看:

  • 抽象更多的是“ 什麼 ”一類能做到。[ 想法 ]
  • 封裝更多地是關於“ 如何 ”實現該功能的。[ 實施 ]

我在很多博客上都看到了與此理論相矛盾的地方。因此,如果您也不同意這一點,請忍受我。另外,我將要求您對與主題相關的想法發表評論。我會很樂意嘗試聯繫或否定。
展望未來,我將以我們衆所周知的[HashMap]類爲例。此類負責存儲鍵值對,基於鍵進行搜索並執行更多操作。從外部,客戶端代碼僅知道方法名稱及其行爲。它調用了這些方法並快樂地生活着。這實際上是抽象準則。抽象表示,客戶端代碼應調用添加鍵值對的方法,基於鍵檢索值的方法等。應該怎麼做?不是抽象業務。
當您開始編寫實際代碼時,封裝就到了。您編寫HashMap.Entry類並創建類型的變量_表_Entry[]。然後,您將所有此類內容聲明爲私有,並僅允許公衆訪問put()get()方法等。這實際上是封裝。實現所需的抽象
我希望您對Java封裝有更多的瞭解,以及它與抽象區別
學習愉快!

更多精彩請關注公衆號【lovepythoncn】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章