オブジェクトとインスタンス β版
Note:
この記事はほぼ忘れかけられているしろくま@胡瓜's Blogのクラス解説の続きのβ版です。僕自身ハード担当でプログラムよわよわ人間です。こちらにβ版として投稿したらTwitter上のつよつよさん達が訂正・指摘してくれると信じて投稿させていただきます。
なお、正式版は後日ブログの方に書きます。
β版を出すことによって確認したいところ
- そもそもの理解があっているか
- クラス自体はオブジェクトじゃなかった気がするがそこが不安(自分の中ではクラスはあくまで型でありそれを元にメモリ上に実態(=オブジェクト)にしたものがインスタンスであるという解釈)
- 画力がなさすぎてそもそも説明の絵として成り立っていない説
この記事の目標到達点
- C++に出てくる用語のクラス、オブジェクト、インスタンスの三つの違いを理解する
なお#1, #2の記事と同様、C++言語以外の言語との整合性は保証できません。(僕はJavaとか全く使えないので…)
またこのシリーズはあくまで『クラスに関して「なんとなくわかった」程度の理解を目指す記事』なので詳しい説明は省きます。C++を始めたばかりでクラスの概念が理解できておらずつまづいている人の救済を目的とした記事です。
この記事で扱う範囲・扱わない範囲
扱う
- クラスとインスタンスの関係
- オブジェクトとは何か?
扱わない
- 動的なメモリ確保
- クラスの継承
- コンストラクタとデストラクタ
クラスとは?
とある白熊がケーキ職人になりました。改良に改良を重ねようやく完成しました。
この原作をクラスとします。
インスタンスとは?
一回作り方を習得したあなたはこれを元にいくらでも同じものを作ることができます。
この原作のクラスを元にしてできたケーキのことをインスタンスと呼びます。
ひとつのインスタンスに注目してみてみましょう。
ケーキを構成する要素としてクリームやイチゴソース、スポンジなどさまざまなものが挙げられます。これが変数や関数に当たります。食えるもんは全部変数や関数です。
では商品棚に作ったケーキを並べましょう。
これでお客さんが利用できる状態になりました。注意しなければならないのはクラスは商品棚には並ばないということです。原型がなくなってしまったらそれを元にケーキを作れなくなってしまうからです。腐る?そんな現象は存在しない
このクラスのインスタンスを生成する一連の作業を「インスタンス化」と呼びます。
オブジェクト is 何
説明の前に結論だけ述べると「商品棚に載っている全てのもの」がオブジェクトです。
商品棚に乗っているケーキは一種類ではないかもしれません。そもそもケーキすらなく、トッピング用のチョコ単体とか蝋燭かもしれません。
この商品棚に乗っている全てのものがオブジェクトです。それがインスタンス化されていない蝋燭単体やチョコレートであってもそれはオブジェクトです。
この商品棚というのは実際のプログラムではメモリに当たります。
このようにまとめると
- オブジェクトは商品棚に乗っているケーキである
- インスタンスはオブジェクトである
といえます。ただし後者に関しては逆は必ずしも成り立ちません。