説明する時にいつも読むのでまとめ
カプセル化とは
クラスに変数とメソッドを凝集し、隠蔽し、インスタンス化して量産・利用できるようにしたもの
- まとめて、隠して、たくさん作る仕組み
- クラスとは意訳すると「種類」
- インスタンスとは意訳すると「実体」
- クラスで定義したものはインスタンス化することで利用できる
- なので、クラスとインスタンスはセットで考えると良い
- 独立性の高い部品を作る仕組み
- オブジェクト指向三大要素の1つ
- 種類と実体は集合論でいう集合と要素に相当する
特徴
概念的側面(現実世界)
分類ができる
- 例えば「アメリカンショートヘア」と「日本猫」と「パグ」と「柴犬」
- 「猫」という種類の「アメリカンショートヘア」と「日本猫」という実体
- 「犬」という種類の「パグ」と「柴犬」という実体
技術的側面(プログラミング)
インスタンス化する時に実体に必要な情報を渡せる。インスタンス化された対象は状態を管理し続ける。インスタンス化された対象は公開する情報が制限されている
- インスタンス化をすると、コンストラクタが実行される
- コンストラクタが実行されると、フィールドが設定される
- コンストラクタとは意訳すると「構築するもの」
- フィールドとは意訳すると「属性情報」
- 例えば「Cat」というクラスと「ねこさん」というインスタンス
- 「Cat」クラスがインスタンス化するのに必要な情報は「名前」(だけ今回は)
- 「Cat」がインスタンス化するとコンストラクタでインスタンスに必要な情報である「ねこさん」が設定される
- 「ねこさん」誕生
- 「ねこさん」であり続けるので「ねこさん」は何回でも鳴ける
プログラミング技術における「クラス」の利用
Cat.java
public class Cat {
String name;
Cat(String name) {
this.name = name;
}
public void cry() {
System.out.println("にゃ〜");
}
}
プログラミング技術における「インスタンス」の利用
Main.java
public class Main {
public static void main(String[] args) {
Cat nekosan = new Cat("ねこさん");
nekosan.cry();
}
}
ポイント
- 役割を1つにする
- クラスは型として扱うことができる
- 説明で使われる用語が視点や文脈や人によって違ったりする
- 大体同じ
- インスタンス化
- インスタンス生成
- 生成する
- newする
-> new の部分がコード的には相当する
- 大体同じ
- 初期化する
- コンストラクタする
- initializeする
- initする
->今回(Java)でいうと「Dog{」の部分。PHPとかだと「__constract」。Rubyとかだと「initialize」。Pythonとかだと「__init__」。Swiftとかだと「init」
- 大体同じ
- フィールド
- メンバー変数
- インスタンス変数
関連記事
書籍情報
平澤 章 (著) オブジェクト指向でなぜつくるのか 第2版
https://amzn.to/2VSrzwe
雑感
カプセル化はプログラミング技術的に説明しようとすると複数要素や視点がある
説明する言葉も多いのと、視点によって説明対象が同じでもニュアンスが違ったりするので一番大事で難しい感。