インスタンス

計算機科学でのインスタンスinstance)とは実体のことをいう。instanceは英語で「実例」を意味する。

オブジェクト指向におけるインスタンス

オブジェクト指向言語においては、多くの場合クラスと呼ばれるものを元に作成したオブジェクトの実体を指す。データモデルやオブジェクト指向設計においても用いられる用語である。インスタンスを生成するプロセスをインスタンス化 (instantiation、動詞形instantiate)という。

概要

オブジェクト指向において、クラスあるいは型はオブジェクトの分類(分類概念)や集合に相当している。 あるクラス C のインスタンスとは、C という分類に属する(分類される)オブジェクトのことである。Smalltalkの影響が強い言語では、クラス自体もまたオブジェクトとして扱うことができる(これをクラス・オブジェクトと言う)。そのような場合は特に、「クラスC のオブジェクト」といった言い方では、「クラスC に属するオブジェクト」の意味か「クラスC そのものを表すオブジェクト」の意味か曖昧になる。この場合、「クラスC のインスタンス」という言い方が利用できる。クラス・オブジェクトと対比して、「インスタンス・オブジェクト」という言葉も使われている。

オブジェクト指向におけるインスタンスという言葉は、元々Sketchpadという言語の"Master"から"Instance"を生成するという仕組み"instance drawings"が由来となっている用語である。[1]そしてC++と並びオブジェクト指向の概念を築づいたSmalltalkが、この"Master"と"Instance"の関係をクラスから生成されたオブジェクトになぞらえ、クラスから生成されたオブジェクト(インスタンス・オブジェクト)の意味で使い始めインスタンス・オブジェクトを表す言葉として定着させた。[2]

静的型付けのオブジェクト指向言語では珍しいが、動的型付けのオブジェクト指向言語の多くは、メタクラスをサポートし、クラス自体もオブジェクトとして扱うことができる(クラス・オブジェクト)。クラス・オブジェクトは、端的に言えば変数に束縛できるクラスである。クラス・オブジェクト、インスタンス・オブジェクト双方を変数に束縛した際どちらもオブジェクトとして振る舞い見かけ上区別はつかない。例えばクラス・オブジェクト、インスタンス・オブジェクト双方が readFrom: というメソッドを持っていた場合、どちらも #readFrom: メッセージを送ってやるとエラーも起こさずそれぞれのメソッドを実行する。

Objective-CPythonにおいてはクラス・オブジェクトとインスタンス・オブジェクトの明確な区別が行われている。[3][4]

メタクラスがサポートされているシステムでは、クラス・オブジェクトもまた別のクラス(メタクラス)のインスタンスであるということがありうる。この場合「クラス・オブジェクトはインスタンスではない」とは言えないので、注意されたい。


脚注

関連項目

外部リンク

🔥 Top keywords: メインページ特別:検索上戸彩エドワード・S・モースXG (音楽グループ)石丸伸二秋葉原通り魔事件山田昌蓮舫木村カエラ椎名林檎井上愛一郎杉浦太陽ブルース・リー渡部峻アンチヒーロー (テレビドラマ)岡崎慎司高橋里華河合優実MY FIRST STORY無職転生 〜異世界行ったら本気だす〜クリストファー・コロンブス古畑任三郎黎智英赤間麻里子髙嶋政伸怪獣8号若葉竜也山本未來小川博Z-1 (アイドルグループ)稲葉浩志眞栄田郷敦天野鎮雄石川さゆり長谷川博己ノーマンズランド三上悠亜森内寛樹