• ベストアンサー

何のクラスでしょうか

クラスの勉強をしています。 インスタンスがクラスを実体化したことまでは理解しましたが、 アプリケーション単位にインスタンスハンドルを持っているの意味が分かりません。 アプリケーションとは何のクラスを実体化したものなのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.3

HINSTANCEのことですね。 Win32APIのようなC言語互換のインターフェイスでは、 オブジェクト指向の概念で言うクラスなどではなく、ハンドルという別の抽象的な概念を用いることがあります。 # C言語のFILE* なども概念的にはファイルのハンドルです。 とはいえ、オブジェクト指向でハンドルという考え方が使えないわけではありません。 オブジェクト指向は無関係に使える概念というだけです。 これはオブジェクト指向の概念とは直接関係がありませんので、 ここでいうインスタンスも、クラスうんぬんとは無関係の別物です。 混同するとわけがわからなくなります。 このサイトではアプリケーションとなっていますが、 実際には実行モジュール(foo.exeとかbar.dllとか)の 単位でハンドルが割り当てられます。 foo.exeを実行すると、これがメモリ上にロードされ動き始めます。 このとき、同時にfoo.exeを二個起動することができますが、これらを区別するときに各インスタンスのハンドルを使います。 foo.exeがbar.dllをロードすれば、bar.dllでもハンドルが取得できます。 Windowsはリソースがどのモジュールにあるかを理解/判断しますので、リソースを操作する場合などにこのハンドルを指定したりします。 この動作を、オブジェクト指向的なインスタンスに絡めて説明すると、 ・foo.exeをいう実行"ファイル"があります。(しいて言えばこれがクラス相当) ・foo.exeを起動してメモリに展開すると、これがインスタンスの生成です。 ・生成された各インスタンスが動作します。

ruby7
質問者

お礼

回答ありがとうございます。 HINSTANCEっていうんですか。 クラスとは別物なんですね。なんとなくすっきりしました。 詳しい説明をいただき参考になりました。

その他の回答 (2)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

> アプリケーション単位にインスタンスハンドルを持っているの意味が分かりません。 インスタンスハンドル、というのはWin32のHINSTANCEのことですか? もしくは、アプリケーション内のHWND等のことですか。 Java等の論理的なハンドルでしょうか。もっと抽象的な話ですか? 具体的な名前や例を挙げてみてください。 > アプリケーションとは何のクラスを実体化したものなのでしょうか? 「アプリケーション」という概念をクラスとして、 それを実体化すればアプリケーションのインスタンスができますが、 そういうことではないですか。 一般に、 インスタンスというものは、識別ができるクラスの実体です。 ハンドルというのは、特定のインスタンスを指して、ソレを制御するためのものです。 「あの人」という「人間」クラスのハンドルがあるとき、 「あの人」と「加藤」さんというインスタンスを結びつけると、 加藤さんの名前を知らなくても「あの人」を使って操作ができる。 # あの人にこれをお願いして。

ruby7
質問者

補足

回答ありがとうございます。 書かれていたのは次のサイトです。 http://f12.aaa.livedoor.jp/~qsrqst/hskouza/hs35.html Windows上の実際の動作の話のようなので アプリケーションクラスという概念的な話でありません。

  • keibou21
  • ベストアンサー率31% (18/58)
回答No.1

C++の勉強ですか? Windowsの勉強ですか? ごちゃ混ぜにして考えている可能性があります。 純粋なC++を勉強をされているならば「インスタンスハンドル」はとりあえず無視してください。 もし参考書を読みながら勉強されていて、そのような疑問が生じたのであれば純粋な言語の勉強をするには不向きな書籍の可能性があります。

ruby7
質問者

お礼

回答ありがとうございます。 C++の勉強をしていて、Windowsのハンドルとかを調べていました。 両方をごちゃ混ぜにするとまずいのですか? 詳細は2の方の補足のところに書いておきました。