C++の基礎:カプセル化について学ぶ

提供: Support
移動先: 案内検索

概要

オブジェクト指向プログラミングとは、データ(オブジェクトの属性プロパティ)やコードブロック(オブジェクトのメソッド関数)を含むオブジェクトを統合する方法です。これらの属性やメソッドは、クラスに属する変数や関数であり、一般的には「クラスメンバ」と呼ばれています。


C++では、クラスにはメンバ(属性、メソッド)があり、このクラスの中で各メンバーを保護する必要があります。これらのメンバーをクラス内で使用し、他のクラスやアプリケーション、ユーザーから保護するにはどうすればよいのでしょうか?その答えは、「カプセル化」を学ぶことです。


C++におけるカプセル化という用語は、Classと呼ばれる単一のステートメント内の属性(プロパティ)とメソッド(関数)をカバーするために使用されます。別の言い方をすれば、データや情報を一つのユニットにまとめることです。機密性の高いデータをユーザーから確実に隠すためには、カプセル化が必要です。この目的は、データに直接アクセスできないようにするためで、データへのアクセスはクラスの関数やメソッドを介して提供されます。


データのカプセル化とは、データとそれを使用する関数を束ねる仕組みであり、データ抽象化とは、インターフェースのみを公開し、実装の詳細をユーザーから隠す仕組みのことです。これは主にクラスの属性に関連しています。


クラスを賢く使用することでカプセル化を行うことができます。これらのクラス属性またはメソッドをprivateのアクセス指定子として宣言する必要があります。つまり、クラスの外部からアクセスすることはできませんが、そのクラスのメンバの属性またはメンバのメソッドからアクセスすることができます。


これを行うためには、

  1. すべてのデータメンバーを非公開にすべきです。
  2. 各データメンバのpublicなSetter(セッター)関数とGetter(ゲッター)関数を作成し、Setterがデータメンバの値を設定し、Getterがデータメンバの値を取得するようにしなければなりません。


なお、クラスのprivateメンバの値を外部(例えば、他のクラスや関数)から読取り、あるいは変更したい場合は、publicのgetメソッドやsetメソッドを使用してprivateメンバにアクセスすることができます。


例えば、人間の給料はプライベートなものだと仮定して、これをprivateセクションで定義します。この例では、set_salary()とget_salary()というpublicメソッドを定義し、これらの関数を使用してプライベートな給与の値を設定・取得することができます。以下のコード例は、setとgetのEncapsulationメソッドが使用されたTHumanクラスです。

class THuman  
{         
  private:
   int salary;  
 
  public: 
    void set_salary(int sal) 
    {
      salary = sal;
    }
 
    int get_salary() 
    {
      return salary;
    }
};

これらのset_salary()メソッドとget_salary()メソッドはpublicセクションで定義されていることに注意してください。これで、set_salary()メソッドを使って給与を設定し、 get_salary()メソッドを使って給与の値を取得できるようになりました。Encapsulationメソッドの使用方法の完全なコードは、以下の通りです。

#include <iostream>
 
class THuman
{
  private:
   int salary;
 
  public:
 void set_salary(int sal)
    {
   salary = sal;
    }
 
 int get_salary()
    {
   return salary;
 }
};
 
 
int main()
{
  THuman worker; // define object by the THuman class
 
  worker.set_salary(50000); // set private variable by using a public function
  std::cout << "Salary: " << worker.get_salary() << '\n';  // get private member value by using a public function
 
  getchar();
  return 0;
}

データの安全性を高めるためには、カプセル化の手法が必要です。そのため、クラスの属性をできるだけprivateに宣言することを強くお勧めします。カプセル化を使用すると、データの他の部分に影響を与えることなく、データの一部を変更でき、データをより適切に制御できます。カプセル化の手法は、データ統合アプリケーションにおいて、C++プログラミング言語がいかに安全でセキュアであるかを証明しています。


関連情報