什麼是 C++ 中的數據隱藏? 抽象和封裝解釋

已發表: 2021-05-24

目錄

數據隱藏簡介

數據是程序中最敏感和易變的組成部分,如果被操縱,可能會導致錯誤的輸出並損害數據的完整性。 這就是數據隱藏至關重要的地方。 在技​​術術語中,數據隱藏也稱為信息隱藏,是一種固有的面向對象編程機制 (OOP),用於向最終用戶隱藏內部對象細節。

數據隱藏的基本目標是隱藏類內的數據以防止未經授權的訪問,並避免類外不必要的滲透。 數據隱藏保證了受限的數據訪問,以確保對象完整性並防止對相關程序進行意外或有意的更改。

簡而言之,數據隱藏會佔用程序代碼的某些部分,並從對象成員中屏蔽它。 如果對象成員試圖訪問隱藏數據,程序將返回錯誤。 這是為了確保程序員避免連接到已隱藏的錯誤數據而引入的一種警告機制。 往往是隱藏在用戶端沒有可預見需求的內部組件。

數據隱藏、數據抽象和數據封裝

C++ 中的數據隱藏與其他兩個 OOP 屬性——抽象和封裝密切相關。

數據抽象

數據抽像是一種僅向最終用戶公開相關程序接口並隱藏更複雜和復雜的實現細節的機制。 讓我們考慮一個現實生活中的例子,以便更好地理解。 考慮你的電視。 您可以打開和關閉電視、更改頻道、調節音量以及添加外部組件,例如 VCR、DVD 播放器和揚聲器。 但是你不知道電視​​的內部機制。

你不知道它是如何接收信號、翻譯它們並最終顯示輸出的。 因此,電視是內部實施和外部影響分離的一個很好的例子。 通過數據抽象,可以保護類實現免受意外錯誤的影響,並根據不斷變化的需求或錯誤報告進行演變,而無需用戶級干預。

數據封裝

數據封裝是指將數據及其相關功能捆綁到一個稱為類的單元中。 換句話說,如果你有一個來自對像外部的不可見屬性並將它與提供讀取或寫入訪問權限的方法捆綁在一起,你可以隱藏敏感信息並調節對事物內部狀態的訪問。

因此,根據您實現的方法,您有責任決定一個屬性是否可以讀取和更改,或者它是只讀的還是根本不可見。

數據隱藏和數據封裝的區別

在討論 OOP 時,數據隱藏和數據封裝通常可以互換使用,因為這兩個概念共同完成了敏感信息的共同目標輔助看門人。 數據封裝的想法無疑在功能上與數據隱藏相比,但由於它們工作在不同的層次上,所以它們在結構上是不同的。

儘管在本質上彼此相關,但數據隱藏和數據封裝之間存在著至關重要的區別。

  1. 數據隱藏和封裝的主要區別在於,前者側重於增強程序中的數據安全性,而後者側重於隱藏程序的複雜性。
  2. 數據隱藏側重於類中對象成員的可訪問性,而數據封裝側重於如何訪問數據以及不同對象的行為方式。 封裝主要是通過信息隱藏來完成的,而不僅僅是信息隱藏。 這意味著程序員隱藏了對象成員的結構並隱藏了其所有方法的實現。
  3. 數據隱藏側重於限製程序中的數據使用以確保數據安全,而數據封裝側重於包裝(或封裝)複雜數據以向用戶呈現更簡單的視圖。
  4. 在數據隱藏中,數據必須被定義為私有的。 在數據封裝中,數據可以是公開的,也可以是私有的。
  5. 數據隱藏本身既是一個過程,也是一個技術,而數據封裝是數據隱藏的一個子過程。

訪問說明符

C++ 通過創建用戶定義的類型(稱為類)來支持數據隱藏,並通過擴展支持數據抽象和數據封裝。 這個創建的類的成員範圍由稱為訪問說明符的關鍵字定義。 通常,在一個類別中可以使用三種類型的保護或訪問說明符——私有的、受保護的和公共的,用於構建類的封裝能力。

訪問說明符有助於定義如何從類外部訪問類型的變量和函數。 通常,類中的數據是私有的,以消除意外操作實例,其操作是公共的。 但是,等級內的可訪問性不受任何限制。

私有變量/函數:只能由定義為類的一部分的成員訪問。

公共變量/函數:可以從程序中的任何位置訪問。

受保護的變量/函數在類中是私有的,並且僅可用於派生類中的遠程訪問。

數據隱藏的應用

為了更好地理解數據隱藏,讓我們考慮以下示例。 考慮到您是程序員,讓我們假設您聲明了一個名為“CheckAccount”的類,其中您已通過術語“Balance”定義了一個數據成員,該術語指的是用戶的銀行賬戶餘額。

在此特定示例中,數據成員“餘額”是敏感信息。 儘管您可能會提供外部應用程序訪問權限以查看此敏感信息,但您很可能不會讓此外部應用程序更改存儲在成員“餘額”中的數據的屬性。 這個結果可以使用數據隱藏來實現,更具體地說,是通過使用私有訪問說明符來控制的。

  1. 數據隱藏通常在不可預測和敏感的數據上執行。 這種數據是有效和快速運行程序的基礎。 由於訪問不當,產生的數據更改數據是永久性的,並且要求程序員在進一步使用之前完全返工。
  2. 數據隱藏有助於保護班級成員免受無意的忽視。 一個類通常包含必須處於可靠狀態的各種相關字段。 假設允許程序員直接控制這些字段中的任何一個。 在這種情況下,您可能會在不更改關鍵相關字段的情況下轉換一個區域,從而使您的班級處於衝突狀態。

數據隱藏的好處

數據隱藏的好處是多方面的:

  1. 它用於降低數據的不可預測性和數據複雜性。
  2. 它提高了程序的可重用性。
  3. 通過限制軟件組件之間的相互依賴性,還可以降低系統複雜性以提高穩健性。
  4. 隱藏數據的物理存儲設計。 這有助於清晰地定義界面,提高可讀性和可理解性。
  5. 它提供數據保證,防止損壞和無根據的訪問。 換句話說,它有助於隱藏重要數據,從而確保針對黑客的增強安全協議。 如果所有內部數據都公開,黑客很容易侵入內部數據並進行惡意更改以改變程序的功能。 隱藏數據使得破解代碼變得更加困難,因為隱藏的數據對於班級的外部成員和黑客來說是不可見的。
  6. 封裝的類簡單明了,易於管理,便於應用程序的未來開發。

數據隱藏的缺點

數據隱藏的唯一缺點是額外的編碼。 數據隱藏需要程序員編寫更長的代碼以在隱藏數據中創建所需的效果。

從世界頂級大學在線學習軟件工程課程獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

結論

數據隱藏類似於俄羅斯輪盤遊戲。 在俄羅斯輪盤賭中,六個洞中只有一個有子彈。 讓我們想像一下,這個鏡頭是一種可感知的數據威脅。 你願意冒險嗎? 可能存在對您有利的五種情況,但您能具體確定威脅嗎? 答案是不。 所有的情景都承擔著懷疑和恐懼的同等概率負擔。 與其屈服於這種不確定性,不如採取反對數據威脅的立場。 隱藏數據進行臥底。

如果您有興趣了解有關 Java、OOP 和全棧軟件開發的更多信息,請查看 upGrad 和 IIIT-B 的全棧軟件開發執行 PG 計劃,該計劃專為工作專業人士設計,並提供 500 多個小時的嚴格培訓, 9 個以上的項目和任務、IIIT-B 校友身份、實用的實踐頂點項目和頂級公司的工作協助。

什麼是面向對象編程中的封裝?

封裝是將數據和對數據進行操作的代碼綁定在一起的一種方式。 它是一種用於隱藏數據實現細節同時將數據抽象暴露給外界的機制。 將信息隱藏在定義良好的接口後面的過程稱為封裝。 封裝是面向對象編程的一個強大概念。 它是通過創建訪問器函數向外界隱藏對象的內部數據和操作的過程。

什麼是面向對象編程中的抽象?

抽像是面向對象編程中使用的一種技術,用於將類的接口與每個單獨對象的實現細節分開。 這意味著可以在不更改使用該類的代碼的情況下更改代碼。 在面向對象編程 (OOP) 中,抽象表示可以操作但未明確定義的對象。 抽像是OOP的重要組成部分; 它是將類的接口與其方法的實現分離的過程。

面向對象編程中類和對像如何交互?

類和對像是面向對象 (OO) 編程的基礎。 面向對象編程是一種編程範式,它使用對象和類對現實世界進行建模。 類是藍圖或模板。 它是對對象應該是什麼的描述或規範。 它定義了特定類型對象的特徵、行為和數據。 對像是類的實例或示例。 程序中的每一個對像都可以分為一個或多個類。 一個類可以繼承另一個類的屬性、方法和其他特性。 這稱為繼承。