[解決済み] オブジェクト指向プログラミングにおける「インターフェイス」の定義とは?
質問
私の友人が、プログラミングにおけるインターフェイスの意味について、何度も議論しています。
インターフェイスの最も良い説明は何でしょうか。
私にとってのインターフェイスはクラスの設計図です。
どのように解決するのですか?
インターフェースは、開発においてより過負荷で混乱しやすい用語の1つです。
これは実際には、抽象化とカプセル化の概念です。与えられた "box" に対して、それは を宣言します。 は、そのボックスの入力と出力を宣言します。ソフトウェアの世界では、これは通常、ボックス上で呼び出すことができる操作 (引数とともに) と、場合によってはこれらの操作の戻り値の型を意味します。
宣言の近くに(例えばコメントを通して)それらを文書化したり、良い命名規則を選ぶことは一般的(そして非常に良い習慣)ですが、それがしないのは、これらの操作のセマンティクスが何であるかを定義していることです。とはいえ、これらの意図が守られる保証はどこにもありません。
ここに例えがあります。電源が切れているときのテレビを見てください。そのインターフェイスは、ボタン、さまざまなプラグ、および画面です。そのセマンティクスと動作は、入力 (ケーブル プログラミングなど) を受け取り、出力 (画面上の表示、サウンドなど) を持つということです。しかし、プラグインされていないテレビを見るときは、自分が期待するセマンティクスをインターフェースに投影していることになります。テレビを接続したら、爆発するかもしれない。しかし、そのインターフェイスに基づいて、吸水口がないため、コーヒーを淹れることはできないと仮定できます。
オブジェクト指向プログラミングにおいて、インターフェースは一般に、そのインターフェースを持つクラスのインスタンスが応答し得るメソッド (またはメッセージ) のセットを定義します。
Javaなどいくつかの言語では、言語固有のセマンティクスを持つ実際のインターフェイスが存在することが、混乱に拍車をかけています。たとえば、Java では、それはメソッド宣言のセットであり、実装はありませんが、インターフェイスは型にも対応し、さまざまな型付けルールに従います。
C++のような他の言語では、インターフェースはありません。クラス自体がメソッドを定義しますが、クラスのインターフェースはプライベートでないメソッドの宣言と考えることができます。C++のコンパイルの仕方によって、ヘッダファイルには実際の実装を伴わないクラスの"interface"を記述することができます。また、純粋仮想関数などを持つ抽象クラスでJavaのインターフェイスを模倣することもできます。
インターフェースはクラスの設計図ではありません。青写真とは、1つの定義によれば、行動の詳細な計画です。インターフェースは動作について何も約束しません! 混乱の原因は、ほとんどの言語で、メソッドのセットを定義するインターフェース型がある場合、それを実装するクラスは同じメソッドを繰り返す(ただし定義は提供する)ため、インターフェースがクラスのスケルトンまたはアウトラインのように見えることです。
関連
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] オブジェクト名の前のシングルアンダーコアとダブルアンダーコアの意味は何ですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] 自分」という言葉は何のためにあるのか?
-
[解決済み] パブリック、プライベート、プロテクトの違いは何ですか?
-
[解決済み] Java のコア・ライブラリにおける GoF デザイン・パターンの例
-
[解決済み] 抽象クラスの代わりにインターフェイスを使用する場合とその逆は?
-
[解決済み】「インターフェースに合わせたプログラム」とはどういう意味ですか?
-
[解決済み] プライベートとプロテクト-ビジビリティ・グッド・プラクティスの懸念点【終了しました
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Inversion of Controlとは?
-
[解決済み] リスコフ置換原理の例として、どのようなものがありますか?
-
[解決済み】インターフェイスを作成するタイミングはどのように判断するのでしょうか?
-
[解決済み】「結合度が低く、結合度が高い」とはどういう意味ですか?
-
[解決済み] Delegateとは?[クローズド]。
-
[解決済み] プライベートとプロテクト-ビジビリティ・グッド・プラクティスの懸念点【終了しました
-
[解決済み] 継承と集計の比較【終了しました
-
[解決済み] オブジェクト指向分析・設計によるエレベータのモデル化 [終了しました]
-
[解決済み] Dependency InjectionはEncapsulationを犠牲にしなければならないのか?
-
[解決済み] オブジェクト指向プログラミングにおける「インターフェイス」の定義とは?