LoginSignup
2
0

More than 3 years have passed since last update.

Encapsulation(カプセル化)復習

Last updated at Posted at 2020-10-17

Encapsulation(カプセル化)とはなんだっけかな?

最近OOPの基本概念の1つであるカプセル化の理解が薄れていたので、めちゃくちゃ復習範囲狭めで自分の復習用で書きます。

カプセル化ってなんなの?とプログラミングしたことない彼女に聞かれた場合、
簡単に説明すると、薬のカプセルみたいに、外部から中にあるあの細かい粒たちを守ることw。と最初に言い、それからコードで説明するかも。

外部からオブジェクトに対するアクセスコントロールと自分は理解しています。(本当はもっとあるかもしれない。。)
コメントでアドバイスを頂き、自分の理解が間違っていたことに気付けました。

アクセスコントロールはカプセル化をするための手段なので、カプセル化とは違いますね。

カプセル化の説明

カプセル化は、ソフトウェアを分割する際に、関係するデータとそのデータを必要する処理を1つにまとめ、無関係なものや関係性の低いものをクラスから排除することで「何のためのクラスなのか?」というクラスの目的を明確化するために行い、ほかのクラスに重複するデータや処理がない状態を目指すものです。

めちゃくちゃ簡単なコードで具体的に説明すると

Person.java
public class Person {
    private int age;
    private String name;
    // クレジットカードの暗証番号
    private int creditCardPinNum;
    public double weight = 69;

    public Person(int age, String name, int creditCardPinNum) {
        this.age = age;
        this.name = name;
        this.creditCardPinNum = creditCardPinNum;
    }
    // getter
    public String getName() {
        return name;
    }
    // setter
    public void changeName(String name) {
        this.name = name;
    }

    // 外部から年齢を読むことはできる getter
    public int getAge() {
        return age;
    }
}

注意:概念を復讐するため、自分なりの解釈になってます。

まず人って年齢変えれませんよね?10歳の人が”明日から20歳する”とはできません、
なので、Personクラスのageは変更できないようアクセスコントロールされています(メンバー変数をprivateにし、setterメソッドをなくしている)。
他人に自分の年齢は伝えることはできるので、getterはあります(嘘がつけるとかは今回無しで)。

nameですが、人って名前は何回でも変更可能なので、Person クラスではsetterメソッド(changeName)が書かれています。

まとめ

カプセル化とは外部からのアクセスコントロール(情報隠蔽)
カプセル化は、ソフトウェアを分割する際に、関係するデータとそのデータを必要する処理を1つにまとめ、無関係なものや関係性の低いものをクラスから排除することで「何のためのクラスなのか?」というクラスの目的を明確化するために行い、ほかのクラスに重複するデータや処理がない状態を目指すものです。

2
0
5

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
2
0