抽象(abstraction)和封裝(encapsulation)的區別

抽象和封裝都是基本的面向物件程式設計(OOP)概念,允許您將真實世界的物件實現為程式和程式碼。雖然這兩者是並行不悖的,但它們卻有很大的不同。雖然每個方法都是一個封裝,但它也是一個抽象。簡單地說,當你把不同的東西放在一起建立一個實體時,你實際上建立了一個概念——一個抽象概念。雖然兩者在技術上是不可分割的,但實際上卻毫無共同之處。幾乎所有的封裝都是一個抽象,因為它們都隱藏了一些東西,但是它們也有各自的區別。...

抽象和封裝都是基本的面向物件程式設計(OOP)概念,允許您將真實世界的物件實現為程式和程式碼。雖然這兩者是並行不悖的,但它們卻有很大的不同。雖然每個方法都是一個封裝,但它也是一個抽象。簡單地說,當你把不同的東西放在一起建立一個實體時,你實際上建立了一個概念——一個抽象概念。雖然兩者在技術上是不可分割的,但實際上卻毫無共同之處。幾乎所有的封裝都是一個抽象,因為它們都隱藏了一些東西,但是它們也有各自的區別。

什麼是抽象(abstraction)?

抽象是一個基本的OOP概念,它只關註物件的相關資料,隱藏所有不相關的細節,這些細節可能是通用的,也可能不是專用的行為。它隱藏了背景細節,強調了減少複雜性和提高效率的要點。基本上,抽象是管理複雜性的程式設計工具。抽象關註的是思想而不是事件。它透過向用戶提供功能來隱藏設計層的細節。結果物件也可以稱為抽象。程式設計師確保命名實體包含所有基本方面,而不包含任何不相關的方面。

讓我們舉一個抽象的真例項子。讓我們考慮一輛車的情況,在這種情況下,它就是你的車。一個技工試圖修理你的車,或者說修理你車的某個特定部分。在這裡,你是使用者,你不想進入你的車的細節或什麼部分實際上打破了。你其實並不在乎那些事情;你只想讓你的車回到原來的狀態,而不用擔心細節。所以,你實際上是透過分離實現部分來告訴機械師你想要什麼。這是抽象。你專註於最重要的事情,那就是修車,而不是關註細節。

抽象(abstraction)和封裝(encapsulation)的區別

什麼是封裝(encapsulation)?

封裝是另一個OOP概念,它將資料和函式繫結到單個元件中,同時限制對某些元件的訪問。它是OOP的主要基本概念之一,將資料和資訊封裝在一個單元下。從技術上講,封裝意味著隱藏屬性以遮蔽外部訪問變數,這樣應用程式的一部分中的更改就不會影響其他部分。相反,透過使資訊更加公開,您將面臨資料被濫用的風險。它透過保護資料不受外界影響來提供資料的基本完整性。簡單地說,它對外界隱藏了額外的細節。

以藍芽滑鼠為例。你只需要知道裝置的行為,而不用擔心實現細節,比如滑鼠有什麼樣的感測器,是不是無線的等等。每一個細節都描述了滑鼠,但不管細節如何,它只是一個滑鼠。您只需要一個介面來使用滑鼠,在本例中是滑鼠指標。這是封裝。

抽象和封裝的區別

雖然這兩個概念都是面向物件的基本概念,在技術上是不可分割的,但在很多方面還是有區別的。

  1. 抽象和封裝的“定義”不同——抽象是一個基本的OOP概念,它強調物件的所有基本方面,透過隱藏不相關的細節來提高效率和消除複雜性。另一方面,封裝是一種資料隱藏機制,它將資料和資訊封裝在一個膠囊中,以限制外界的訪問。
  2. 抽象和封裝的“功能”不同——抽象是一種資料隱藏機制,它只強調使複雜程式更簡單的基本特性,而封裝則是一種將資料和程式碼繫結到單個實體的方法。其思想是保護實現細節不受外部訪問。
  3. 抽象和封裝的“實現”不同——抽象是使用抽象類和介面實現的,而封裝是使用訪問修飾符實現的。有五種型別的修飾符用於封裝資料:Private、Public、Internal、Protected和protectedinternal。
  4. 抽象和封裝的“概念”不同——抽象背後的理念是關註什麼而不是如何。封裝隱藏了其內部機制。例如,當你開車時,你確切地知道剎車踏板的作用,但你可能不知道它背後的整個機制,因為資料是封裝的。
  5. 抽象和封裝的“示例”不同——讓我們以智慧**為例。你知道它做什麼,但你可能不知道它是怎麼做的。你只關心顯示屏和鍵盤按鈕,而不關心它的內部電路。在這裡,**artphone是一個抽象,其中封裝了內部實現細節。

比較表的抽象與封裝

抽象 封裝
它只處理相關的細節,透過隱藏不相關的細節來降低複雜性,從而提高效率。 它將資料和資訊繫結到一個實體中,以保護資料不受外部來源的影響。
它指的是隱藏不需要用於表示目的的資料的思想。 它隱藏資料和程式碼以限制不必要的訪問。
它關註的是什麼而不是如何。 它隱藏了它做某事的內在機制。
它隱藏了設計層上不必要的細節。 它也隱藏了細節,但在實現級別。
資訊和資料與相關資料分開。 資訊隱藏在一個膠囊裡,以便近距離接觸。
它處理的是思想而不是事件。 這樣做是為了保護資料不受外界影響。
它是使用抽象類和介面實現的。 它是使用protected、private和package private訪問修飾符實現的。

總結

雖然這兩個都是與資料隱藏相關的OOP概念,但它們彼此有很大的不同。抽象還涉及到類似於隱藏的封裝,但是前者隱藏了複雜性,而後者透過控制對資料的訪問來保持它所封裝的資料。抽象是指透過隱藏不相關的細節來表示必要的特性,從而降低應用程式的複雜性,從而提高效率。另一方面,封裝指的是隱藏程式的所有內部機制,以保護資訊不受不必要的訪問。它透過限制對其他元件的訪問,將資料和資訊繫結到一個元件中。

  • 發表於 2021-06-25 03:41
  • 閱讀 ( 53 )
  • 分類:科技

你可能感興趣的文章

遊離神經末梢(free nerve endings)和封裝的(encapsulated)的區別

...嘴脣。此外,它們對輕觸有反應。 什麼是包裹神經末梢(encapsulated nerve endings)? 與遊離神經末梢不同,包裹的神經末梢不包含神經傳遞的開放端。因此,與遊離神經末梢相比,包裹神經末梢的敏感性較低。一些機械感受器有包...

  • 發佈於 2020-10-16 00:28
  • 閲讀 ( 46 )

封裝(encapsulation)和脫膠囊(decapsulation)的區別

.... 並列比較-以表格形式封裝與去封裝 6. 摘要 什麼是封裝(encapsulation)? 網路模型用於標準化網路通訊。當從一個位置向另一個位置傳送資料時,資料會經過許多層。TCP/IP模型有四層。它們是應用層、傳輸層、網際網路層和網路接...

  • 發佈於 2020-10-19 15:30
  • 閲讀 ( 75 )

摘要(abstract)和介紹(introduction)的區別

...解兩者的區別,以及摘要和導言的作用。 什麼是摘要(an abstract)? 首先讓我們從抽象開始。摘要,也稱為大綱,是期末論文的簡短形式。它包含了研究結果的關鍵。摘要也指提交會議或研討會的研究論文的簡短版本。任何一所大...

  • 發佈於 2020-10-22 19:14
  • 閲讀 ( 51 )

資料隱藏(data hiding)和封裝(encapsulation)的區別

資料隱藏(data hiding)和封裝(encapsulation)的區別 面向物件程式設計(OOP)是程式設計的一個主要正規化。它有助於使用物件開發程式或軟體。物件是使用藍圖建立的。它被稱為一個類。類由應該包含在物件中的屬性和行為組成。...

  • 發佈於 2020-10-24 02:51
  • 閲讀 ( 49 )

繼承(inheritance)和java介面(interface in java)的區別

...可以建立類和物件。OOP有四個支柱。它們是繼承、多型、抽象和封裝。繼承和介面與OOP有關。繼承和介面的關鍵區別在於繼承是從現有的類中派生新的類,而介面是實現抽象類和多重繼承。 目錄 1. 概述和主要區別 2.Java中的繼承...

  • 發佈於 2020-10-25 00:02
  • 閲讀 ( 64 )

哦(oop)和流行音樂(pop)的區別

...種正規化的不同主要是由於它們在設計解決方案時建立的抽象。程式設計方法中的抽象將資訊的相關性與使用者的相關性分離開來透檢視POP和OPP的主要區別在於POP建立和使用過程抽象,而OOP則側重於資料抽象。 什麼是哦(oop)? ...

  • 發佈於 2020-10-28 20:06
  • 閲讀 ( 49 )

摘要(abstract)和具體思路(concrete thinking)的區別

...這兩個術語,並找出它們之間的差異。 什麼是抽象思維(abstract thinking)? 首先,抽象思維可以解釋為一種思維方式,這種思維方式集中於對某一事物的概念化或概括化。一個抽象的思考者可以從別人看不到的角度來看待一個特定...

  • 發佈於 2020-11-04 10:41
  • 閲讀 ( 48 )

面向物件程式設計中抽象的初學者指南

... 什麼是抽象什麼(abstract and what)? ...

  • 發佈於 2021-03-30 04:01
  • 閲讀 ( 80 )

抽象類(abstract class)和c中的介面#(interface in c#)的區別

...讓我們詳細討論一下兩者的理論方面。 什麼是抽象類(an abstract class)? 抽象類是一種特殊型別的類,它充當其他類的基,不能例項化。抽象類的實現邏輯由其派生類提供。為了使一個類抽象,使用了“abstract”修飾符,這意味著...

  • 發佈於 2021-06-25 03:34
  • 閲讀 ( 54 )

抽象類(abstract class)和java介面(interface in java)的區別

...們詳細研究一下兩者的區別。 什麼是java中的抽象類(an abstract class in java)? Java中的抽象類是一個宣告為抽象的類——它可能包含也可能不包含抽象方法。它與Java介面非常相似,只是它可以包含預設的方法實現。與面向物件程式...

  • 發佈於 2021-06-25 03:52
  • 閲讀 ( 43 )