• ベストアンサー

何のクラスでしょうか

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

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

  • ベストアンサー
  • 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の方の補足のところに書いておきました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • クラス?オブジェクト?インスタンス?何がなんだか・

    一般的なオブジェクト指向の 定義として下記で合っているのでしょうか お願いします クラス:第2実体(人間) インスタンス:第1実体(例:山田) オブジェクト:色々なインスタンスをさして、抽象的に総称としてオブジェクト 例えば・・クラス:人間、インスタンス:山田 クラス:犬、インスタンス:ゴン 違うクラスのインスタンスをまとめて呼ぶ際にオブジェクト? よく分からなくなっています、よろしくお願いします

  • C++のクラス内で、ウインドウプロシージャなどの・・・

    Visual C++ 2008で、Windowsフォームアプリケーションを作っています。 .NET Frameworkでは実現できないウインドウを作るために、WindowsAPIに頼り始めたのですが これが分からないのでとても不便な状態なのですが WindowsAPIで使うための、ウインドウプロシージャや、ウインドウハンドルや、デバイスコンテキストハンドル・・・等を C++のクラスの中で、staticを付けずに普通のメンバとして組み込む事は、出来るのでしょうか? - - - - - - 今までは分からなかったので、とりあえずAPIに触れてみようと思いstaticをつけてどうにかやっていたのですが、それだとクラス内のインスタンスメンバにアクセスできないので、クラス内に作ってる意味がない感じになってしまいます。

  • クラスの実体を一つにする方法

    現在、以下の構成でアプリケーションを開発しています。 フォーム(C#)⇔ラップDLL(C++/CLI)⇔処理(C++ネイティブのDLL多数) C++DLLのひとつにクラスAがあるとします。 このクラスAを含むDLLは他のDLLにリンクされています。 このクラスAの実体がアプリケーションの中で一つしかないようにするにはどのようにコーディングすれば良いのでしょうか? シングルトンパターンについて書かれたHPを参考につくってみたのですが、アプリケーションを実行するといくつも実体が作られています。 class __declspec(dllexport) DataStore { private: DataStore(): // コンストラクタ {}; ~DataStore() {}; // デストラクタ public: // このインスタンスを使用してメンバにアクセスする。 static DataStore& GetInstance() { static DataStore myInstance; return myInstance; } };

  • JAVAのクラスの考え方は・・?

    JAVAの勉強をしていている学生です。 常々思っていたのですが、クラスの考え方がしっくりきてませんヽ(~-~ よく参考書などで書かれていることで 「クラスは設計図のようなもの、オブジェクトはそこから作成した実体」 「鋳型がクラスでどんどん作れるのがインスタンス」 といった話が疑問でならないのです。 というのも・・クラスの設計って、自分自身をフィールドに宣言したりできますよね。。 でそこから生成して、また自分自身のフィールドに生成して・・とか。 インターフェースを実装したクラスで、、、内部クラスを持ったクラスで、、、ジェネリッククラス、、。 となってくると、最初の考え方では、論理的に無理?私の脳内では変換しきれないです(´;ω;) 多分前提となる考え方が間違っていたり、私の想像力が乏しいだけだと思います。 どなたか、「クラスってこう考えればオブジェクト指向が見えてくる」と表現している本やサイトなどご存じないでしょうか。 一朝一夕で理解しようとは思っていませんので、きちんと参考にして理解しようと頑張ります! 「私的には・・」や「あなたが勘違いしている箇所は・・」といったご意見もぜひお聞きしたいです! クラスかオブジェクト指向かどっちかというより、クラスありきでJAVAのオブジェクト指向が本当に理解できると考えています。参考書やWEBを探してみた限りではやっぱり理解できないです(´;ω;) ちなみにC言語を中学生で始め、プログラミングに触れました。

  • クラスと関数群のうまい使い方

    今、クラスを使ってPHP(今はPHP4を使っています)によるWEBアプリケーション(といっても、そんなに大げさなものではないですが)を作成しながら、クラスの使い方を勉強しています。 ある程度クラスを使うことには慣れてきたのですが、悩んでいることがあります。 今までは、別ファイルによく使う関数群をまとめて、呼び出す形でやっていました。 それを、クラスを使ってやるようになってから、それぞれのオブジェクトでの処理はそのクラスにまとめることで、すっきりとなりました。 が、全てのクラス(もしくはいくつかのクラス)で共通して使用する処理(文字列操作など)はどうすればいいのかと悩んでいます。 それぞれのクラスに同じ処理を書くのは、クラスを使う意味がない気がするので、避けるべきだと考えていています。 そこで、今までのように共通の処理を関数群にして、クラスファイルでインクルードして使うか、共通処理をもつクラスを作って使用するクラスの中でインスタンスを作成して処理関数を呼び出すか・・・とどちらがいいのでしょうか? ただ、関数群をまとめたファイルを作ると、他にクラスを使う意味がないような気もするし、共通処理をまとめたクラスを作ってその処理を利用するクラスでインスタンスを作るのは、処理的に重くなりそうでまたクラスの本来の意味からすると共通処理をまとめたクラスというのがおかしい気もするし。 根本的にクラスの作り方がまずいのかもしれませんが、良いアドバイス等あればご指摘下さい。 長文になりましたが、よろしくお願いいたします。 追伸) PHPでのクラスの学習についていい本やサイトなどあればそちらもお教え願えればと思います。

    • ベストアンサー
    • PHP
  • インスタンスの定義について。

    今プログラミングについて勉強しています。そこでよく耳にするのがインスタンスという言葉なんですが、本やネットで調べてもなんとなくわかったような、わからなかったような…。よく「実体」という例えは聞くんですが、実体というのはオブジェクトのことになるんじゃないんですか?ご指導お願いします。 あっ!!ちなみにインスタンスという言葉は、使い方によって意味が違ってくるなんてことはないですよね?

  • クラスの練習をしています。

    ある方から、「参照(もしくはポインタ)を使って、人オブジェクトがまるで建物オブジェクトAから建物オブジェクトBに移動したようにしなさい」と言うお題を頂きました。 「生き霊」がなんちゃらとも言ってたのですが、 私は、人クラスを例えばmainでインスタンス化して、その実体をコピーさせて建物クラスAと建物クラスBにそれぞれ置き、それらを同期させてみてはと考えたのです。 初心者なので説明が難解してると思いますが、もし意図しているものが汲み取れた方がいらっしゃったら、 クラスの参照(もしくはポインタ)の扱い方(?)を教えてください。

  • インスタンスのハンドル

    Windowsプログラミングにおいて、 ウィンドウのハンドル等などはピンとくるのですがインスタンスのハンドルというのがいまいちピンときません。 いろいろ調べたのですが、インスタンスを「実体」と解説しているサイトが多かったのですが、(たとえばここ)http://ew.hitachi-system.co.jp/w/E382A4E383B3E382B9E382BFE383B3E382B9.html ただウィンドウを表示させるようなプログラムをつくったとき、何が「実体」で、インスタンスのハンドルとはどういった働きをするのでしょうか。。

  • 抽象メソッド、抽象クラス

    C#を勉強しております。Javaにも同じ機能がありC#のカテゴリーがない為こちらで質問させていただきます。抽象メソッドや抽象クラスを使う利点に関してです。 これらを使う利点を調べたところオーバーライドさせられると書いてありました。オーバーライドしないと 実装がないのでエラーになると書いてありました。その点は理解できたのですが何故基本クラスで実体のない定義をする利点がよくわかりません。それなら最初から派生クラスの方にメソッドを定義すればいいのではという考えになりました。 抽象メソッドとして実体のない定義を行う利点なるものを教えてください。 よろしくお願いします。

  • ネストトップクラス・メンバクラスについて

    現在、SJC-P取得に向け独学でJavaの勉強中です。 ネストクラス・インナークラスについて勉強している最中なのですが、 数冊テキストを読み込んでも、web検索をしても、イマイチよくわからない・・・というのが正直なところです。 どのクラス(アウタークラス/staticインナークラス/非staticインナークラス)の、 どういうメンバ(static/非static/private/final)が、 どのクラスのどういうメンバにアクセス出来るのかが整理しきれません・・・。 わからないなりに、まとめてみたのですが、理解が不十分で、かつ、この下記の通りの理解で正しいのかどうかもわかりません。 (言葉でうまく表現も出来ていない箇所も・・) また理解すべきポイントに不足があるかと思います。 どこが正しく理解出来ているのか・どこがどう間違っているかの指摘及びその内容・理解不足の箇所・よりわかりやすい例の追加や補記など、どうかよろしくお願い致します。 ●staticなインナークラス(=ネストトップクラス)について ・アウタークラスのインスタンスなしに、staticなインナークラスのインスタンスの生成が出来る。 ・staticなインナークラスからはアウタークラスの非staticメンバを直接アクセス出来ない。 (→ただし、staticアウターメンバになら直接アクセス出来る?staticであればprivateでもアクセス可?) ・staticなメソッド内で非staticなインナークラスのオブジェクトが生成出来ない。 ●非staticなインナークラス(=メンバクラス)について ・非staticなインナークラス内にstaticなメンバを持つことは出来ない。 ・アウタークラスのインスタンスを生成してからでないと非staticなインナークラスのインスタンスは生成出来ない。 ・アウタークラスの非staticメンバ及びstaticメンバに直接アクセス出来る。 ●アウタークラス(=外部クラス)について ・アウタークラスのstaticメソッド内で非staticなインナークラスのインスタンスは生成出来ない。 ・非staticインナークラスのメンバ及び、staticなインナークラスのメンバにアクセス出来る。 --------------------------------------------------------- (例)処理はさておき、定義はこんな感じを思い描いております・・ class Outclass{   private int aa;   private static int bb;   private outMethod1();   private static outMethod2();   class NotStaticInner{     private int cc;     //private static int dd;//不可     private inNotStaicMethod1();     //private static inNotStaticMethod2();//不可   }   class StaticInner{     private int ee;     private static int ff;     private inStaticMethod1();     private static inStaticMethod2();   } } 参考テキスト: 『Sun Certified Programmer for Java2 Platform5.0 Exam【310-055】』のChapter11:「ネストクラス・インナークラス」 参考URL: http://wisdom.sakura.ne.jp/programming/java/java46.html