#「クラスは設計図」に違和感がある
##その説明を見て違和感を覚えた
よく、オブジェクト指向の説明で**「クラスは設計図であり、インスタンスが物である」**という説明がされています。私も初めはそれで理解していましたが、いろいろと学んでいくうちに「少し違うのでは」と思ったので、少しまとめてみようと思います。
##発端は「静的クラス」の説明
静的、Staticなクラス(フィールドやメソッドなどのメンバも同じ)について**「インスタンス化しないで使用できる(する)クラス」**という説明を見た時「え、設計図のまま使えるってどういうこと?」と違和感を覚えませんでしたか?
私は「まぁ、実際そうだし、そう覚えるか」と、腑に落ちないままにしていました。
##クラスはインスタンス作成プログラム
よくよく考えれば当たり前で、クラスもプログラムとして実行時にメモリに展開されます。 つまり、クラスとは**「newボタンしか無いインスタンス作成プログラム」**と理解した方が、より実態に即した理解の仕方ではないかと思います。
newボタンを押すと、中でガタガタとコンストラクタが動き、ポン!と自分と同じ形をしたインスタンス(ただしコンストラクタは無い)が出てくる。そんな機械のような気がします。
そう考えると、コンストラクタが何故「クラスと同じ名前」なのかを、newを付けるとクラス名と同じそのメソッドを呼びだすルールと考えると、なるほどと理解できないでしょうか?
ちなみにVBでは、コンストラクタは「New」という名前のメソッドですが、同じように理解できます。
##静的クラス
静的クラスは「インスタンス化しないで使用できる」のではなく、逆に**「インスタンス化できない」**クラス、つまり「newボタンが無く、メソッドのボタンが並んでいる」ので、そのまま使うしかないクラス(プログラム)と考えられるのではないでしょうか?
##静的メンバ(フィールド/メソッド)
クラスの一部、フィールドやメソッドが静的であることは「静的メンバは、インスタンス化時にインスタンスにコピーされない、生成機に取り残される」と捉えることができます。
そのため、静的メンバはインスタンスの中に無いので自分自身を表す「this」は付けられないなども理解しやすいのではないでしょうか。
##おわりに
本来なら、メモリ管理方法と合わせて説明すると良いのでしょうが、私自身も「クラスがどこに展開されているか」を、具体的に説明できないので諦めました。(言語によってまちまちな気がします)