LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

【わかりやすく解説‼】Javaのカプセル化の使い方

1.事前知識

事前知識として、上記リンクの内容が必要です。

2.カプセル化とは

  • カプセル化 とは、オブジェクトの属性と関連する操作をまとめて同じクラスに定義することである。
  • カプセル化 したクラスの属性には アクセッサメソッド を通してのみアクセスできる。
  • 他のオブジェクトは、 カプセル化 したクラスに 直接アクセスできない ため、属性値が不用意に書き換えられるのを防ぐことができる。

3.基本的な書き方

テストクラス
package パッケージ名;
public class メインクラス名{
    public static void main(String[] args) {
        // インスタンスの生成
        クラス名 変数名 = new クラス名();
        // setterに値を入れる
        変数名.setインスタンス変数名(実引数);
        // getterで入れた値の取得をする
        System.out.println(変数名.getインスタンス変数名());
    }
}

カプセル化クラス

package パッケージ名;
class クラス名{
    // インスタンス変数の定義
    private 型名 変数名;

    // コンストラクタ(インスタンス生成時に実行される)
    クラス名(){
        初期化処理など
    }
    // setter
    void setインスタンス変数名(型名 引数名){
        this.変数名 = 引数名;
    }
    // getter
    型名 getインスタンス変数名(){
        return 変数名;
    }
}
  • 基本的なカプセル化は上記のように記述します。

4.事前準備

01.png

  1. Eclipseを起動し、 [ファイル(F)]→[新規(N)]→[Java プロジェクト] を選択する。
    02.png
  2. プロジェクト名に Test1 と入力し、 完了 ボタンをクリックする。
    03.png
  3. [ファイル(F)]→[新規(N)]→[クラス] を選択する。   
    05.png
  4. パッケージと名前に Test1 と入力し、 完了 ボタンをクリックする。
    06.png
  5. Test1.java が作成されたことを確認する。
    07.png
  6. 3と同様の手順でパッケージに Test1 と入力し、 名前に TestCapsule と入力し、 完了 ボタンをクリックする。
    08.png
  7. Test1.javaTestCapsule.java が作成されれば成功。

5.記述例

Test1.java
package Test1;
public class Test1 {
	public static void main(String[] args) {
        // インスタンスの生成
		TestCapsule tc = new TestCapsule();
        // setterに値を入れる
        tc.setHello("おはようございます");
        // getterで入れた値の取得をする
        System.out.println(tc.getHello());
    }
}
TestCapsule.java
package Test1;
public class TestCapsule {
	// インスタンス変数の定義
    private String hello;

    // コンストラクタ(インスタンス生成時に実行される)
	public TestCapsule() {
		this.hello = "Hello";
	}
    // setter
    public void setHello(String hello) {
		this.hello = hello;
	}
	// getter
    public String getHello() {
		return hello;
	}
}
  • 上記の文をコピーして、文字コードは S-JIS を指定し、ファイル名を Test1.java , TestCapsule.java で保存し、実行するとこうなります。↓↓                          
    09.png

6.カプセル化をする理由

  • カプセル化 の狙いは「データを保護する」ということです。
  • もし、 カプセル化 をしなかった場合、データを改ざんすることが容易になります。

例:受験者名と受験者の点数を入力して合否判定を出すシステム

  • 100点満点のテストで60点以上が合格です。
  • 名前と点数を入力して合格か不合格かを判定します。
  • 上記のようなシステムを作る際に カプセル化 をしなかった場合、下記のコードように予期しない点数の変更が行えてしまう。
Test1.java
//受験者名と受験者の点数を管理するシステム
package Test1;
public class Test1 {
	public static void main(String[] args) {
        // インスタンスの生成
		TestCapsule tc1 = new TestCapsule("A",50);
		TestCapsule tc2 = new TestCapsule("B",60);

		//予期しない変数の変更
		tc1.score = 10000;
		tc2.score = -100;

		//合否の表示
		tc1.Result();
		tc2.Result();
    }
}
TestCapsule.java
package Test1;
public class TestCapsule {
	// インスタンス変数の定義
	String name;
	int score;

	// コンストラクタ(インスタンス生成時に実行される)
	public TestCapsule(String name, int score) {
		this.name = name;
		//不正な点数の入力対策
		if(0 <= score && score <= 100) {
			//0以上100以下
			this.score = score;
		}else {
			//0未満または101以上
			this.score = 0;
		}
	}
	//合否判定メソッド
	void Result() {
		if(60 <= score) {
			//合格
			System.out.println(name+"さんは"+score+"点で合格です。");
		}else {
			//不合格
			System.out.println(name+"さんは"+score+"点で不合格です。");
		}
	}
}
  • 上記の文をコピーして、先ほど作成した Test1.java , TestCapsule.java に上書き保存し、実行するとこうなります。↓↓
    10.png

  • 上記の例では、100点満点のテストなため、 10000点-100点 も存在しない。

  • カプセル化 は直接データの操作をさせずに、一度関数を通す状況を作ることで 不正なデータ操作を防ぐ 役割を持っている。

  • 上記の例の TestCapsule.javaカプセル化 すると以下のようになる。

Test1.java
//受験者名と受験者の点数を管理するシステム
package Test1;
public class Test1 {
	public static void main(String[] args) {
        // インスタンスの生成
		TestCapsule tc1 = new TestCapsule("A",50);
		TestCapsule tc2 = new TestCapsule("B",60);

		//予期しない変数の変更
		tc1.setScore(10000);
		tc2.setScore(-100);

		//合否の表示
		tc1.Result();
		tc2.Result();

    }
}
TestCapsule.java
package Test1;
public class TestCapsule {
	// インスタンス変数の定義
	private String name;
	private int score;

	// setter
	public void setName(String name) {
		this.name = name;
	}
	// getter
	public String getName() {
		return name;
	}
	// setter
	public void setScore(int score) {
		//不正な点数の入力対策
		if(0 <= score && score <= 100) {
			//0以上100以下
			this.score = score;
		}
	}
	// getter
	public int getScore() {
		return score;
	}

	// コンストラクタ(インスタンス生成時に実行される)
	public TestCapsule(String name, int score) {
		this.name = name;
		//不正な点数の入力対策
		if(0 <= score && score <= 100) {
			//0以上100以下
			this.score = score;
		}else {
			//0未満または101以上
			this.score = 0;
		}
	}
	//合否判定メソッド
	void Result() {
		if(60 <= score) {
			//合格
			System.out.println(name+"さんは"+score+"点で合格です。");
		}else {
			//不合格
			System.out.println(name+"さんは"+score+"点で不合格です。");
		}
	}
}
  • 上記の文をコピーして、先ほど保存した Test1.java , TestCapsule.java に上書き保存し、実行するとこうなります。↓↓            
    11.png

7.GitHub

GitHubにソースコードを公開しています。

8.関連

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0