質問: クラス、オブジェクト、インスタンス、メソッドについて。 クラス、オブジェクト、インスタンス、メソッドに ついて教えていただけないでしょうか? 今現在の自分の認識では、乗り物を例にすると、 「乗り物」という大枠がクラス。それを、たとえば 飛行機なり電車なり船なり、より具体的にした ものがインスタンス=オブジェクト。 その具体化したものの挙動、動作(走るとか飛ぶとか) がメソッド、という理解です。 ただ、これだとオブジェクトとインスタンスを 同じものとして見てしまっているので、この2つの 違いを明確に説明しろと言われると困ってしまいます。 インスタンスとオブジェクトの違いを明確にした上で うまく伝えられる方法があれば、ご教授ください。
回答: 最初は「オブジェクト=インスタンス」で良いと思います。 ただ、いろいろと細かい話が出てきていますので、私の理解している範囲でアドバイスしたいと思います。 〔オブジェクト〕 設計段階で使う用語です。 クラスオブジェクトとインスタンスオブジェクトの2種類あり、通常単にオブジェクトと言えばインスタンスオブジェクトのことを指すようですが、クラスオブジェクトのことを指すこともあるので注意が必要です。 〔クラス〕 実装段階で使う用語です。 クラスオブジェクトの実装が「クラス」です。 クラスオブジェクトとクラスは完全に一致します。 〔インスタンス〕 実装段階で使う用語です。 インスタンスオブジェクトの実装が「インスタンス」です。 インスタンスオブジェクトとインスタンスは、必ずしも一致しません。 たとえば、c++ であるクラスのインスタンスを new して、ポインタ変数に代入した場合を考えてみます。 インスタンスオブジェクトに相当するのは、そのポインタ変数そのものですよね。 しかし、インスタンスはポインタ変数が指している先、つまりメモリ領域に確保された実体そのものです。 と、まあ、細かいことを言えば、こんな話になりますが、ここまでこだわって話をすることは、まずないでしょう。 設計レベルでは「オブジェクト」、実装レベルでは「インスタンス」と使い分けておけば、とりあえず間違いはないでしょうし、両者を混同したところで話が通じないことはないと思います。 # 私なんか、最初「インスタンスはオブジェクトのちょっとかっこいい # 呼び方だ(?)」などと思っていましたし。。。 # いや、なんとなく響きがかっこよく聞こえたもので。。。 とりあえずは、こんな感じでいかがでしょうか。