インスタンスとは、オブジェクトの実体の事を指す。
オブジェクトを実体化させることは、インスタンス化と呼ばれる。
クラスベースのオブジェクト指向言語において、通常、クラスにアクセスする事は出来ない。
クラスからインスタンス化を行い、生成された実体に対してアクセスを行う。
但し、言語によっては、直接アクセスすることの出来る、静的クラスを作れる物もある。
この静的クラスに対しては、インスタンス化を行うことは出来ない。
また、継承を前提として作られた抽象クラスも、静的クラスと同様にインスタンス化を行うことは出来ない。
例えば何かのパーティーがあって「フレンチシェフを三人手配してくれ」という要望があるとしよう。
しかし会場にやってくるのは田中シェフや鈴木シェフや加藤シェフであって「フレンチシェフ」という人間が世の中にいるわけではない。つまり「フレンチの料理ができる人間」という概念(クラス)と、それに該当する能力を持った具体的な個人(インスタンス)の割り当てが行われるのであり、このような関係がクラスとインスタンスというわけである。
このようにクラスとはそもそも抽象的な存在なので具体的なインスタンスなしで使うということは基本できないのであるが、場合によってはクラス-インスタンスで分けるのがしっくりこないことがある。例えば「地球」みたいなものは常時一個しかないので、クラスだインスタンスだと分けることはせず、いつでもどこでも使えることにしておいたほうが手っ取り早い。これが静的クラスと呼ばれるインスタンスである。
ところでクラス自体抽象的な存在だといったが、それでも「フレンチシェフ」というのはなんの説明もない「シェフ」よりは具体的である。もし「シェフを手配してくれ」とだけ要求を出したら「中華か?和食か?フレンチか?」と聞き返されるだろう。つまりそれだけでは抽象的すぎてどう扱っていいかわからないものは「これだけではインスタンス化できませんよ」とマークする必要があり、こうしたものが抽象クラスとなる。
なお具体-抽象の関係は相対的なのでここで上げた例もケースバイケースである。何が具体で何が抽象かはそのプログラムの内容による。
掲示板
2 ななしのよっしん
2012/11/17(土) 23:29:49 ID: jGn7SdUosh
屁理屈を言ってるように聞こえるかもしれんが
クラスメソッドはクラスのインスタンス化なしでも使える
インスタンスではなくクラスから直接メタ情報を取得する方法もある
それは置いといて、概要がオブジェクト指向言語についての説明になってて、「インスタンス」の概念の説明になってないと思うんだが
3 ななし
2018/05/25(金) 23:06:38 ID: EdGjpEHFwD
一般人にはこの説明では全く分からぬ
4 ななしのよっしん
2023/12/13(水) 13:17:27 ID: a5w0Dhd260
急上昇ワード改
最終更新:2024/04/24(水) 13:00
最終更新:2024/04/24(水) 13:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。