Latest web development tutorials

C ++データ抽象化

データ抽象化は外の世界に重要な情報を提供し、その背景の実装の詳細を隠し、詳細を提示することなく、必要な情報だけの性能ということを意味します。

データ抽象化は、プログラミングインタフェースと実装の分離(設計)技術​​への依存性です。

あなたは、オンとオフのチャンネルを変更し、音量を調節し、外部(スピーカーなど、VCR、DVDプレーヤ)コンポーネントを追加することができますが、その内部を知らないことができ、のは、テレビなど実生活実例を見て​​みましょう実装の詳細は、つまり、あなたは信号を変換する方法、それはケーブル信号により受信されたのか分からないし、最終的に画面に表示されます。

したがって、直接(例えば、リモートコントロール、音量コントローラの電源ボタンなど)、その外部インタフェースを介してテレビを制御することができ、我々は分離に内部実装および外部インターフェイスにテレビを言うことができる、あなたはその内部の原則を知りません。

さて、仕事に取り掛かるてみましょう、それは、C ++プログラミングの観点から、C ++クラスのデータ抽象化が可能です。 外の世界は、データオブジェクトの多数を動作させるための一般的な方法を提供するように、それは、実際には、外の世界では、内部クラスの実装を知らなかったれます。

例えば、あなたのプログラムは、データをソートするために使用されるアルゴリズムの機能を知らなくても、ソート()関数を呼び出すことができます。実際には、別のリポジトリによるソートの実現の基礎となる機能は、限り同じインタフェースとして、いつものように関数呼び出しを変化させます。

C ++では、私たちは、抽象データ型(ADT)を定義するために私たち自身のクラスを使用ます。 次のようにして、標準出力に出力データへのオブジェクトcoutのクラスのostreamを使用することができます

#include <iostream>
using namespace std;

int main( )
{
   cout << "Hello C++" <<endl;
   return 0;
}

ここでは、coutのテキストがユーザの画面上に表示される方法を理解していません。 あなただけのcoutの基本的な実装へのパブリックインターフェイスを自由に変更することができます知っている必要があります。

アクセス]タブ必須抽象

C ++では、私たちは、抽象インターフェースクラスを定義するアクセス]タブを使用します。 クラスは、ゼロ以上のアクセスのラベルを含めることができます。

  • タグは、プログラムのすべての部分にアクセスできるパブリックメンバの使用を定義します。 データの種類の要約ビューが定義され、そのメンバーによって公開されています。
  • プライベートラベルの使用は、コードにアクセスすることはできませんクラスのメンバーを使用して定義されました。 非表示の実装の詳細のタイプを使用してコードのプライベート部分。

アクセス頻度タグは、制限はありません表示されます。 各タグは、定義されたアクセスレベルのメンバーに続いて、アクセスを指定します。 割り当てられたアクセスレベルは次の出会いのアクセス]タブまで有効か、括弧で遭遇右ボディタイプを閉じます。

データ抽象化のメリット

データ抽象化は、2つの重要な利点があります。

  • 内部クラスは、オブジェクトの状態に損傷を引き起こした不注意なユーザレベルのエラーから保護されています。
  • クラスの実装で変化するニーズに応える、またはユーザレベル符号誤りレポートを変更しないそれらの要件を満たすために、経時的に変化することができます。

唯一のそのような著者の準備で自由にデータを変更することができれば、プライベートセクションでは、クラスのデータメンバを定義します。 変更を実装した場合、あなただけのこの変更が発生することがありどのような影響を参照するには、クラスのコードを確認する必要があります。 データが公開されている場合は、データ表現関数メンバの古い形式への直接アクセスが影響を受ける可能性があります。

抽象インスタンスデータ

C ++プログラムは、パブリックおよびプライベートデータ抽象化のメンバを持つクラスは、例として使用することができます。 次の例を考えてみます。

#include <iostream>
using namespace std;

class Adder{
   public:
      // 构造函数
      Adder(int i = 0)
      {
        total = i;
      }
      // 对外的接口
      void addNum(int number)
      {
          total += number;
      }
      // 对外的接口
      int getTotal()
      {
          return total;
      };
   private:
      // 对外隐藏的数据
      int total;
};
int main( )
{
   Adder a;
   
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);

   cout << "Total " << a.getTotal() <<endl;
   return 0;
}

上記のコードはコンパイルされ、実行されると、次の結果を生成します。

Total 60

数字以上のクラスが一緒に合計を返します。 公開メンバーaddNumとgetTotalは外部インタフェースであり、ユーザは自分のクラスを使用するために知っておく必要があります。 プライベートメンバー総ユーザーが知っている必要はありませんが、クラスは必要な作業を行うことができます。

設計戦略

インタフェースと実装にコードを分離する抽象。 あなたが基本となる実装を変更した場合、インターフェイスは変わらないように、だから部品の設計では、インタフェースは、実装の独立性を維持しなければなりません。

この場合は、関係なく、インターフェイスを使用して任意のプログラムの、インターフェースは、最新の再コンパイルを実現するために、影響を受けることはありません。