このブログの中でも何の説明も無しに「インスタンス」という言葉を使っていますが、では若い女性から「インスタンスって何?」と聞かれたらどう答えるか?とふと考えてしまいました。今回はそれに挑戦してみようと思いますが?
例え話
「最初のクラスは何にする?」と聞かれたら、私は「へそ曲がり」なので「宇宙」と答えます。すると質問した人は「ほぉ」と言って次の質問は止めてしまいます。
それでも私と同じように「へそ曲がり」な同僚は居るもので、「宇宙のサブクラスは何にする?」と聞いてきます。類は友を呼ぶ・・・
で、私は「銀河系」と答えます。すると「そのサブクラスは?」と当然聞いて来るので面倒になって「地球」と答えます。そして途中を省略して「印章」まで辿り着きます。「ハンコ」のことです。
クラスとはインスタンスの定義です。そして「押す」というメッセージを「印章」に送ると「印影」というインスタンスが生まれます。
その「印影」は「きらやん」であり、それはプロパティーのひとつです。プロパティーは通常は複数含まれていて、クラスには「名前」とかで定義します。
「印章」のサブクラスは「実印」とか「認印」などです。「実印」のスーパークラスは「印章」であり、「クラス」のクラスはメタクラスです・・・
とまあ説明するのですが、10人中9人は「ふ~ん?」という顔をします。上記の説明で理解できる人はある意味でオタクになれると思います。通常は「慣れ」により解決します。
オブジェクト指向
私が最初に「クラス」と「インスタンス」という言葉に接したのは、アメリカのゼロックス社が開発したプログラミング言語とそのシステムである「Smalltalk」の本を買ってきて読んだ時です。
仕事のための本ではなく、趣味で買ったMacintosh 512Kというアップル社のパソコン上でSmalltalkが動くことを知り興味を持ちました。その時に勤務していた会社が富士ゼロックス社だったのがきっかけです。
そして、その概念を理解するにつれて、世の中の仕組みを実に明快に説明しているように思えて感心してしまいました。私は無駄に仕事を複雑化しているように感じてきました。
そしてクラスからサブクラスを派生していくことによる「継承」という概念を知ります。つまり、上位概念から全てを下位概念に受け継ぐという考え方ですが、これを実際に仕事に活かすと、ムチャクチャ物事をシンプルに考えられるようになりました。
このような仕組みや概念に基づく考え方のことを「オブジェクト指向」と呼びます。主にソフトウェアの世界で用いられますが、考え方なので他の分野でも活用されています。
このブログ内の記事での実例
3DCGの重い処理などを、手持ちのパソコンよりも遥かに高速にローコストで実現できるものとして、アマゾンやGoogleなどが提供している「デスクトップ・クラウド・サービス」があります。
・アマゾン:AWS(Amazon Web Services)
・Google :GCP(Google Cloud Platform)
私が使っているのは「NVIDIA社のGPUが使えるWindowsデスクトップ環境」ですが、時間レンタルで1ドル/時間程度の料金で利用しています。それでも3DCGのレンダリング速度は手持ちのデスクトップPC(Core2 Duo 3GHz, 8GBメモリー)の10倍以上です。
もちろんもっと高速にできますが、それだけ時間レンタル料は高くなります。
このWindowsデスクトップ環境の実体のことをインスタンスと呼んでいます。インスタンスは複数作れるので、例えば低料金で低スペックのインスタンスと高料金で高スペックのインスタンスを両方作って切替えて使うようにできます。同時に使うこともできます。
このようにソフトウェアの事だけど、あたかも仮想の高性能パソコンが低料金でレンタルできるような仕組みの中では普通に「インスタンス」という言葉が使われています。
まとめ
最初の海外出張でアメリカに行った時に、レストランで仕事仲間と食事をした後でそろそろ席を立とうかとしていた時に、私たちの給仕をしてくれたウェイトレスが来て「How about everything?」と質問してきました。
私は何を質問されているのか解らなかったので、隣に座っている先輩の顔を覗くと「Excellent!」と答えました。私は内心「そこまで褒めなくても・・・」と思いましたが、後から聞いた話では彼女たちはそれに生活がかかっているらしいのです。今でもよく理解できないのですが・・・
おそらく、インスタンスという言葉を使って会話をしている技術者たちを他の職種の人が見るとそんな気持ちになるのではないでしょうか?
複雑な概念でもそれを理解することで一歩先に進めるのであれば、少なくとも理解しようと努力することは大切なのかなあと思いました。
ではでは、きらやん