0
0

More than 1 year has passed since last update.

【Java】カプセル化の理解ついての復習をしていく

Posted at

目的

  • カプセル化に関しての復習と定着

実際の手順と実例

1.カプセル化とは

  • カプセル化とはオブジェクトの情報をカプセルのようにまとめ、中身を隠蔽したままオブジェクトを利用すること
  • カプセル化のイメージは
    • 外から防御されている
    • カプセルに包まれている
  • 「オブジェクト内のデータ」を包み、「オブジェクト外からの不正アクセス」を防ぐ

これらのイメージを持って問題を例にして考えていきます。

2.例題

問題

「Practice.java」を実行した結果が同じになるように、「NoCapsule.java」を「Capsule.java」に変更して、カプセル化したプログラムに変更してください。

実行結果

好きな食べ物はラーメンです
週に1回食べています
最近は週に2回食べるようになりました。。。
NoCapsule.java
package practice;

public class NoCapsule {
    public String food;
    public int count;

    public NoCapsule(String food, int count) {
        this.food = food;
        this.count = count;
    }
}
Practice.java
package practice;

public class Practice {
    public static void main(String[] args) {
        NoCapsule eat = new NoCapsule("ラーメン", 1);
        System.out.println("好きな食べ物は" + eat.food +  "です。");
        System.out.println("週に" + eat.count + "回食べています。");
        eat.count = 2;
        System.out.println("最近は週に" + eat.count + "回食べるようになりました。。。");
    }
}

回答

まず、問題通り、「NoCapsule.java」を「Capsule.java」に変更します。

このままでも実行は可能ですが、誤って外部のプログラムが変更禁止のフィールドを変更してしまうことを防止するため、メソッドやフィールドにアクセス修飾子を設定してアクセスを制限します。

Capsule.java
package practice;
//「NoCapsule.java」を「Capsule.java」に変更
public class Capsule {
//  アクセス修飾子をpublicからprivavteに変更
    private String food;
    private int count;

    public Capsule(String food, int count) {
        this.food = food;
        this.count = count;
    }
//  実行ファイルで使用できるようにpublicで定義
    public String getFood() {
        return food;
    }
//  getterはフィールドの値を取得できるようにするメソッド
    public int getCount() {
        return count;
    }
//  setterはメソッドや値を変更するメソッド
    public void setCount(int count) {
        this.count = count;
    }
}

Practice.java
package practice;

public class Practice {
    public static void main(String[] args) {
//      「NoCapsule.java」を「Capsule.java」に変更
        Capsule eat = new Capsule("ラーメン", 1);
//      getterで定義した変数を使用する
        System.out.println("好きな食べ物は" + eat.getFood() + "です。");
        System.out.println("週に" + eat.getCount() + "回食べています。");
//      setterで値を変更
//      引数に変更する値を代入
        eat.setCount(2);
        System.out.println("最近は週に" + eat.getCount() + "回食べるようになりました。。。");
    }
}

実行結果も全く同じになりました。

好きな食べ物はラーメンです
週に1回食べています
最近は週に2回食べるようになりました。。。

また、Eclipseでは、下記の箇所からカンタンに自動でカプセル化も可能です!
スクリーンショット 2021-09-29 8.01.48.png

参考にさせて頂いた記事

0
0
1

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
  3. You can use dark theme
What you can do with signing up
0
0