0
0

More than 3 years have passed since last update.

「クラスは設計図である」という説明に違和感を覚えた話

Posted at

「クラスは設計図」に違和感がある

その説明を見て違和感を覚えた

よく、オブジェクト指向の説明で「クラスは設計図であり、インスタンスが物である」という説明がされています。私も初めはそれで理解していましたが、いろいろと学んでいくうちに「少し違うのでは」と思ったので、少しまとめてみようと思います。

発端は「静的クラス」の説明

静的、Staticなクラス(フィールドやメソッドなどのメンバも同じ)について「インスタンス化しないで使用できる(する)クラス」という説明を見た時「え、設計図のまま使えるってどういうこと?」と違和感を覚えませんでしたか?
私は「まぁ、実際そうだし、そう覚えるか」と、腑に落ちないままにしていました。

クラスはインスタンス作成プログラム

よくよく考えれば当たり前で、クラスもプログラムとして実行時にメモリに展開されます。 つまり、クラスとは「newボタンしか無いインスタンス作成プログラム」と理解した方が、より実態に即した理解の仕方ではないかと思います。
newボタンを押すと、中でガタガタとコンストラクタが動き、ポン!と自分と同じ形をしたインスタンス(ただしコンストラクタは無い)が出てくる。そんな機械のような気がします。
そう考えると、コンストラクタが何故「クラスと同じ名前」なのかを、newを付けるとクラス名と同じそのメソッドを呼びだすルールと考えると、なるほどと理解できないでしょうか?
ちなみにVBでは、コンストラクタは「New」という名前のメソッドですが、同じように理解できます。

静的クラス

静的クラスは「インスタンス化しないで使用できる」のではなく、逆に「インスタンス化できない」クラス、つまり「newボタンが無く、メソッドのボタンが並んでいる」ので、そのまま使うしかないクラス(プログラム)と考えられるのではないでしょうか?

静的メンバ(フィールド/メソッド)

クラスの一部、フィールドやメソッドが静的であることは「静的メンバは、インスタンス化時にインスタンスにコピーされない、生成機に取り残される」と捉えることができます。
そのため、静的メンバはインスタンスの中に無いので自分自身を表す「this」は付けられないなども理解しやすいのではないでしょうか。

おわりに

本来なら、メモリ管理方法と合わせて説明すると良いのでしょうが、私自身も「クラスがどこに展開されているか」を、具体的に説明できないので諦めました。(言語によってまちまちな気がします)

0
0
2

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