オブジェクト指向プログラミングにおける「インターフェース」の定義は何ですか?質問する

オブジェクト指向プログラミングにおける「インターフェース」の定義は何ですか?質問する

私の友人は、プログラミングにおける「インターフェース」の意味について議論しています。

「インターフェース」の最も適切な説明は何でしょうか?

私にとって、インターフェースはクラスの設計図です。これが最適な定義でしょうか?

ベストアンサー1

インターフェースは、開発において最も頻繁に使用され、混乱を招く用語の 1 つです。

それは実際には抽象化とカプセル化の概念です。与えられた「箱」に対して、宣言するそのボックスの「入力」と「出力」。ソフトウェアの世界では、これは通常、ボックスで呼び出すことができる操作(引数とともに)を意味し、場合によってはこれらの操作の戻り値の型を意味します。

これらの操作のセマンティクスが何であるかを定義することはできませんが、宣言の近くで (たとえば、コメントを介して) それらを文書化したり、適切な命名規則を選択したりすることは一般的 (かつ非常に良い習慣) です。ただし、これらの意図が守られるという保証はありません。

ここに例えがあります。テレビがオフのとき、テレビを見てください。テレビのインターフェイスは、テレビにあるボタン、さまざまなプラグ、および画面です。テレビのセマンティクスと動作は、入力 (ケーブル プログラミングなど) を受け取り、出力 (画面の表示、サウンドなど) することです。ただし、プラグが差し込まれていないテレビを見ると、期待されるセマンティクスをインターフェイスに投影していることになります。テレビを差し込むと爆発する可能性もあります。ただし、その「インターフェイス」に基づいて、テレビには給水口がないため、コーヒーは作れないと想定できます。

オブジェクト指向プログラミングでは、インターフェースは通常、そのインターフェースを持つクラスのインスタンスが応答できるメソッド (またはメッセージ) のセットを定義します。

混乱を招いているのは、Java などの一部の言語では、言語固有のセマンティクスを持つ実際のインターフェースが存在することです。たとえば、Java では、インターフェースは実装のないメソッド宣言のセットですが、インターフェースは型にも対応し、さまざまな型指定ルールに従います。

C++ などの他の言語には、インターフェースはありません。クラス自体がメソッドを定義しますが、クラスのインターフェースは非プライベート メソッドの宣言と考えることができます。C++ のコンパイル方法により、実際の実装なしでクラスの「インターフェース」を持つことができるヘッダー ファイルが得られます。また、純粋仮想関数などを持つ抽象クラスを使用して、Java インターフェースを模倣することもできます。

インターフェースは、クラスの設計図ではありません。 設計図は、ある定義によれば、「詳細な行動計画」です。 インターフェースは、行動について何も約束しません。 混乱の原因は、ほとんどの言語では、一連のメソッドを定義するインターフェース型がある場合、それを実装するクラスは同じメソッドを「繰り返す」(ただし定義は提供する) ため、インターフェースはクラスのスケルトンまたはアウトラインのように見えることです。

おすすめ記事