- ベストアンサー
インターフェースとは何なのか?
- インターフェースとは何なのか?私の中では、「関数をたくさん定義して、継承させるためのもの」という適当な認識をしているが、IDirect3D9インターフェースは、インスタンス化されており、これを継承したクラスは使われていない。しかし、普通にメンバ関数を扱っている。
- IDirect3D9インターフェースの役割は何でしょうか?インターフェースとは、継承を利用して関数をまとめるためのものという一般的な認識があるが、IDirect3D9インターフェースは単独でインスタンス化され、そのメンバ関数が利用されている。
- なぜIDirect3D9はインターフェースとして扱われているのでしょうか?それは、IDirect3D9が他のクラスによって継承され、そのメンバ関数が利用されることを意図して作られたためです。インターフェースの名前を付けることで、他のクラスが継承して利用することを明示しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Interfaceというのは、 こういう時にこの引数でこれを呼ぶと、こうなる。 他者との間で、呼出と応答のお約束を決めたものです。 (原義は、顔の間、界面という意味です) そして、本来的なinterfaceは必ずしも継承とは関係ありません。 (継承のないC言語であっても関数宣言などはinterfaceの一部です) IDirect3D9に限らず、interfaceを *使う際には* インタンス化/実体化が必要です。 DirectXのようなCOMのinterfaceは、通常 *提供する側が* 継承したインスタンスを提供するので、 使う側は、GUIDを指定するだけで、その具象クラスをあまり意識していないだけです。 中身を意識せず、呼び出して使えるのがinterfaceであって、 提供する側(ここではMicrosoft)は、interfaceのルールさえ守れば、 中身の実装を自由に変えられて、影響を与えないのがinterfaceの利点です。 (実装を公開しないので、こっそり?DirectX側のバグを直したりすることが可能です) 「受付担当」インターフェイスがあったとして、 適切な同じ回答をしてくれる限り、それが「事務員」クラスの「鈴木」インスタンスでも、 「人間」クラスの「田中」インスタンスでも、 「自動応答装置」クラスの「Answer01」でも、受付にお願いした方はそれを気にしない。 受付業務を行うクラスが受付担当インターフェイスを実現し、 そのクラスのインスタンスが実際の責務を果たせばよい。 インターフェイスを解したやり取りというのはそういうことです。 # 共通のインターフェイスがないと、人間にお願いする時と自動応答装置にお願いする時には手順が変わってしまうでしょう。
お礼
バッチリよく分かりました。 継承というのはオプショナルで、本質的には継承するために…ということではないのですね。