C ++でデータを隠すこととは何ですか? 抽象化とカプセル化の説明

公開: 2021-05-24

目次

データ隠蔽の概要

データはプログラムの最も機密性が高く揮発性の高いコンポーネントであり、操作すると、誤った出力が発生し、データの整合性が損なわれる可能性があります。 これは、データの隠蔽が不可欠であることが証明されている場所です。 技術用語では、情報隠蔽とも呼ばれるデータ隠蔽は、エンドユーザーから内部オブジェクトの詳細を隠すための固有のオブジェクト指向プログラミングメカニズム(OOP)です。

データ隠蔽の根本的な目的は、クラス内のデータを不正アクセスから隠し、クラス外からの不必要な侵入を回避することです。 データの非表示は、オブジェクトの整合性を確保し、問題のプログラムへの意図しないまたは意図された変更を防ぐために、制約されたデータアクセスを保証します。

簡単に言えば、データの非表示はプログラムコードの特定の部分を取り、オブジェクトメンバーからそれを選別します。 オブジェクトメンバーが非表示のデータにアクセスしようとすると、プログラムはエラーを返します。 これは、プログラマーが隠された誤ったデータへの接続を控えることを確実にするために導入された警告メカニズムです。 多くの場合、非表示になっているのは、ユーザー側で予測可能な必要性のない内部コンポーネントです。

データの非表示、データの抽象化、およびデータのカプセル化

C ++に隠されているデータは、他の2つのOOPプロパティである抽象化とカプセル化と密接に関連しています。

データの抽象化

データの抽象化は、関連するプログラムインターフェイスのみをエンドユーザーに公開し、より複雑で複雑な実装の詳細を隠すメカニズムです。 理解を深めるために、実際の例を考えてみましょう。 あなたのテレビを考えてみてください。 テレビのオンとオフを切り替えたり、チャンネルを変更したり、音量を調整したり、VCR、DVDプレーヤー、スピーカーなどの外部コンポーネントを追加したりできます。 しかし、あなたはテレビの内部メカニズムを知りません。

あなたはそれがどのように信号を受信し、それらを変換し、そして最後に出力を表示するかを知らない。 したがって、テレビは、内部実装と外部影響の分離の優れた例です。 データの抽象化により、クラスの実装は不注意によるエラーから保護され、ユーザーレベルの干渉なしに要件の変更やバグレポートに応じて進化します。

データのカプセル化

データのカプセル化とは、データとそれに関連する機能をクラスと呼ばれる単一のユニットにバンドルすることです。 つまり、オブジェクトの外部から見えない属性があり、それへの読み取りまたは書き込みアクセスを提供するメソッドとバンドルしている場合、デリケートな情報を非表示にして、モノの内部状態へのアクセスを規制できます。

したがって、実装するメソッドに応じて、属性を読み取って変更できるかどうか、または属性が読み取り専用であるか、まったく表示されないかを決定する責任があります。

データの非表示とデータのカプセル化の違い

OOPの説明では、データの隠蔽とデータのカプセル化が同じ意味で使用されることがよくあります。これは、これらの概念の両方が連携して、機密情報の補助ゲートキーパーという共通の目的を達成するためです。 データのカプセル化の考え方は、間違いなく機能的にはデータの非表示と比較されますが、機能が異なるため、構造的に異なります。

本質的に相互に関連していますが、データの非表示とデータのカプセル化には決定的な違いがあります。

  1. データの非表示とカプセル化の主な違いは、前者はプログラムのデータセキュリティの強化に重点を置いているのに対し、後者はプログラムの複雑さの非表示を扱っていることです。
  2. データの非表示は、クラス内のオブジェクトメンバーのアクセス可能性に重点を置いていますが、データのカプセル化は、データへのアクセス方法とさまざまなオブジェクトの動作に重点を置いています。 カプセル化は、情報を隠すだけでなく、主に情報を隠すことによって実現されます。 これは、プログラマーがオブジェクトメンバーの構造を非表示にし、そのすべてのメソッドの実装を非表示にすることを意味します。
  3. データの非表示は、データのセキュリティを確保するためにプログラムでのデータの使用を制限することに重点を置いていますが、データのカプセル化は、複雑なデータをラップ(またはカプセル化)してユーザーに簡単なビューを提供することに重点を置いています。
  4. データの非表示では、データはプライベートとしてのみ定義する必要があります。 データのカプセル化では、データはパブリックまたはプライベートにすることができます。
  5. データの隠蔽はそれ自体がプロセスであり技術でもありますが、データのカプセル化はデータの隠蔽のサブプロセスです。

アクセス指定子

C ++は、データの非表示をサポートし、さらに、クラスと呼ばれるユーザー定義の型を作成することにより、データの抽象化とデータのカプセル化をサポートします。 この作成されたクラスのメンバーのスコープは、アクセス指定子と呼ばれるキーワードによって定義されます。 通常、カテゴリ内で使用可能な保護またはアクセス指定子には、プライベート、保護、パブリックの3種類があり、クラスのカプセル化機能を構築するために使用されます。

アクセス指定子は、クラスの外部から型の変数と関数にアクセスする方法を定義するのに役立ちます。 通常、クラス内のデータは、偶発的な操作インスタンスを排除するためにプライベートであり、その操作はパブリックです。 ただし、ランク内のアクセシビリティは制限に拘束されません。

プライベート変数/関数:クラスの一部として定義されたメンバーのみがアクセスできます。

パブリック変数/関数:プログラムのどこからでもアクセスできます。

保護された変数/関数はクラス内でプライベートであり、派生クラスのリモートアクセスでのみ使用できます。

データ隠蔽の適用

データの隠蔽をよりよく理解するために、次の例を考えてみましょう。 あなたがプログラマーであると仮定して、「CheckAccount」という名前のクラスを宣言するとします。このクラスでは、ユーザーの銀行口座の残高を表す「Balance」という用語でデータメンバーを定義しています。

この特定の例では、データメンバー「バランス」は機密情報です。 この機密情報を表示するために外部アプリケーションへのアクセスを提供することもできますが、おそらく、この外部アプリケーションにメンバーの「残高」に保存されているデータの属性を変更させないでください。 この結果は、データの非表示を使用して実現できます。具体的には、プライベートアクセス指定子を使用して制御します。

  1. データの非表示は、通常、予測不可能で繊細なデータに対して実行されます。 この種のデータは、プログラムを効果的かつ迅速に実行するための基本です。 過度のアクセスにより、結果として生じるデータ変更データは永続的であり、さらに使用する前にプログラマー側で完全なやり直しを義務付けています。
  2. データの非表示は、意図しない見落としからクラスメンバーを保護するのに役立ちます。 クラスは通常、信頼できる状態でなければならないさまざまな関連フィールドで構成されます。 プログラマーがこれらのフィールドのいずれかを簡単に制御できると仮定します。 その場合、重要な関連フィールドを変更せずに1つの領域を変換し、クラスを競合状態のままにする可能性があります。

データ非表示の利点

データ非表示の利点は複数あります。

  1. これは、データの予測不可能性とデータの複雑さを軽減するために使用されます。
  2. プログラムの再利用性が向上します。
  3. ソフトウェアコンポーネント間の相互依存性を制限することにより、システムの複雑さを軽減し、堅牢性を高めます。
  4. データの物理的な備蓄設計を非表示にします。 これは、インターフェイスを明確に定義するのに役立ち、読みやすさとわかりやすさを向上させます。
  5. 破損や不当なアクセスからのデータ保証を提供します。 言い換えれば、それは重要なデータを隠すのに役立ち、それによってハッカーに対する高度なセキュリティプロトコルを保証します。 すべての内部データが公開された場合、ハッカーは内部データに簡単に侵入し、悪意を持って意図した変更を加えてプログラムの機能を変更する可能性があります。 データを非表示にすると、クラスの外部メンバー、つまりハッカーには非表示のデータが表示されなくなるため、コードを解読するのがはるかに困難になります。
  6. カプセル化されたクラスは単純で、管理が簡単で、アプリケーションの将来の開発を容易にします。

データ非表示のデメリット

データ非表示の唯一の欠点は、余分なコーディングです。 データを非表示にするには、プログラマーがより長いコードを記述して、非表示のデータに目的の効果を作成する必要があります。

世界のトップ大学からオンラインでソフトウェアエンジニアリングコース学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。

結論

データの隠蔽は、ロシアンルーレットのゲームに似ています。 ロシアンルーレットでは、6つの穴のうち1つだけが弾丸を持っています。 ショットが知覚可能なデータの脅威であると想像してみましょう。 チャンスをつかんでいただけませんか? あなたに有利に働く5つのシナリオが存在する可能性がありますが、脅威を具体的に特定できますか? 答えはいいえだ。 すべてのシナリオは、疑惑と恐怖の同じ確率的負担を負います。 この不確実性に屈するのではなく、データの脅威に立ち向かおう。 データを隠して隠蔽してください。

Java、OOP、フルスタックソフトウェア開発の詳細に興味がある場合は、upGrad&IIIT-Bのフルスタックソフトウェア開発のエグゼクティブPGプログラムをチェックしてください。これは、働く専門家向けに設計されており、500時間以上の厳格なトレーニングを提供します。 9以上のプロジェクトと割り当て、IIIT-B卒業生のステータス、実践的な実践的なキャップストーンプロジェクト、トップ企業との仕事の支援。

オブジェクト指向プログラミングのカプセル化とは何ですか?

カプセル化は、データとデータを操作するコードをバインドする方法です。 これは、データの抽象化を外部に公開しながら、データ実装の詳細を非表示にするために使用されるメカニズムです。 明確に定義されたインターフェースの背後に情報を隠すプロセスは、カプセル化として知られています。 カプセル化は、オブジェクト指向プログラミングの強力な概念です。 これは、アクセサ関数を作成することにより、オブジェクトの内部データと操作を外部から隠すプロセスです。

オブジェクト指向プログラミングの抽象化とは何ですか?

抽象化は、オブジェクト指向プログラミングで使用される手法であり、クラスのインターフェイスを個々のオブジェクトの実装の詳細から分離します。 これは、クラスを使用するコードを変更せずにコードを変更できることを意味します。 オブジェクト指向プログラミング(OOP)では、抽象化は、操作はできるが明示的に定義できないオブジェクトを表します。 抽象化はOOPの重要な部分です。 これは、クラスのインターフェースをそのメソッドの実装から分離するプロセスです。

クラスとオブジェクトは、オブジェクト指向プログラミングでどのように相互作用しますか?

クラスとオブジェクトは、オブジェクト指向(OO)プログラミングの基盤です。 オブジェクト指向プログラミングはプログラミングパラダイムであり、オブジェクトとクラスを使用して実世界をモデル化します。 クラスは青写真またはテンプレートです。 これは、オブジェクトがどうあるべきかについての説明または仕様です。 特定のタイプのオブジェクトの特性、動作、およびデータを定義します。 オブジェクトは、クラスのインスタンスまたは例です。 プログラム内のすべてのオブジェクトは、1つ以上のクラスに分類できます。 クラスは、別のクラスのプロパティ、メソッド、およびその他の特性を継承できます。 これは継承と呼ばれます。