Encapsulation(カプセル化)復習
Encapsulation(カプセル化)とはなんだっけかな?
最近OOPの基本概念の1つであるカプセル化の理解が薄れていたので、めちゃくちゃ復習範囲狭めで自分の復習用で書きます。
カプセル化ってなんなの?とプログラミングしたことない彼女に聞かれた場合、
簡単に説明すると、薬のカプセルみたいに、外部から中にあるあの細かい粒たちを守ることw。と最初に言い、それからコードで説明するかも。
外部からオブジェクトに対するアクセスコントロールと自分は理解しています。(本当はもっとあるかもしれない。。)
コメントでアドバイスを頂き、自分の理解が間違っていたことに気付けました。
アクセスコントロールはカプセル化をするための手段なので、カプセル化とは違いますね。
カプセル化の説明
カプセル化は、ソフトウェアを分割する際に、関係するデータとそのデータを必要する処理を1つにまとめ、無関係なものや関係性の低いものをクラスから排除することで「何のためのクラスなのか?」というクラスの目的を明確化するために行い、ほかのクラスに重複するデータや処理がない状態を目指すものです。
めちゃくちゃ簡単なコードで具体的に説明すると
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つにまとめ、無関係なものや関係性の低いものをクラスから排除することで「何のためのクラスなのか?」というクラスの目的を明確化するために行い、ほかのクラスに重複するデータや処理がない状態を目指すものです。
Author And Source
この問題について(Encapsulation(カプセル化)復習), 我々は、より多くの情報をここで見つけました https://qiita.com/kimto341/items/7c6daf244646e76e23a4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .