アプリ版:「スタンプのみでお礼する」機能のリリースについて

最近DirectX9をやってます。
始める→挫折→C++をもう一度勉強→また始める
という状況で、だいたいのことは分かってきたのですが、
IDirect3D9というのがいまいち分かりません。

インターフェースというのは私の中では、「関数をたくさん定義して、継承させるためのもの」という適当な認識をしているのですが、
IDirect3D9インターフェースは、インスタンス化されていますし、これを継承したクラスは使いませんし、普通にメンバ関数を扱っています。

いったい、インターフェースとは何なのでしょうか?
また、IDirect3D9インターフェースは、何故インターフェース何でしょうか?

是非ご教授ください。

A 回答 (1件)

Interfaceというのは、


こういう時にこの引数でこれを呼ぶと、こうなる。
他者との間で、呼出と応答のお約束を決めたものです。
(原義は、顔の間、界面という意味です)

そして、本来的なinterfaceは必ずしも継承とは関係ありません。
(継承のないC言語であっても関数宣言などはinterfaceの一部です)

IDirect3D9に限らず、interfaceを *使う際には* インタンス化/実体化が必要です。
DirectXのようなCOMのinterfaceは、通常 *提供する側が* 継承したインスタンスを提供するので、
使う側は、GUIDを指定するだけで、その具象クラスをあまり意識していないだけです。

中身を意識せず、呼び出して使えるのがinterfaceであって、
提供する側(ここではMicrosoft)は、interfaceのルールさえ守れば、
中身の実装を自由に変えられて、影響を与えないのがinterfaceの利点です。
(実装を公開しないので、こっそり?DirectX側のバグを直したりすることが可能です)

「受付担当」インターフェイスがあったとして、
適切な同じ回答をしてくれる限り、それが「事務員」クラスの「鈴木」インスタンスでも、
「人間」クラスの「田中」インスタンスでも、
「自動応答装置」クラスの「Answer01」でも、受付にお願いした方はそれを気にしない。
受付業務を行うクラスが受付担当インターフェイスを実現し、
そのクラスのインスタンスが実際の責務を果たせばよい。
インターフェイスを解したやり取りというのはそういうことです。
# 共通のインターフェイスがないと、人間にお願いする時と自動応答装置にお願いする時には手順が変わってしまうでしょう。
    • good
    • 0
この回答へのお礼

バッチリよく分かりました。
継承というのはオプショナルで、本質的には継承するために…ということではないのですね。

お礼日時:2009/01/26 00:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!