1. ホーム
  2. oop

[解決済み] オブジェクト指向プログラミングにおける「インターフェイス」の定義とは?

2022-06-29 14:45:12

質問

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

インターフェイスの最も良い説明は何でしょうか。

私にとってのインターフェイスはクラスの設計図です。

どのように解決するのですか?

インターフェースは、開発においてより過負荷で混乱しやすい用語の1つです。

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

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

ここに例えがあります。電源が切れているときのテレビを見てください。そのインターフェイスは、ボタン、さまざまなプラグ、および画面です。そのセマンティクスと動作は、入力 (ケーブル プログラミングなど) を受け取り、出力 (画面上の表示、サウンドなど) を持つということです。しかし、プラグインされていないテレビを見るときは、自分が期待するセマンティクスをインターフェースに投影していることになります。テレビを接続したら、爆発するかもしれない。しかし、そのインターフェイスに基づいて、吸水口がないため、コーヒーを淹れることはできないと仮定できます。

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

Javaなどいくつかの言語では、言語固有のセマンティクスを持つ実際のインターフェイスが存在することが、混乱に拍車をかけています。たとえば、Java では、それはメソッド宣言のセットであり、実装はありませんが、インターフェイスは型にも対応し、さまざまな型付けルールに従います。

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

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