なぜインターフェイスを使用するのですか?標準化のためだけですか? [閉まっている

StackOverflow https://stackoverflow.com/questions/2026054

  •  19-09-2019
  •  | 
  •  

質問

なぜインターフェイスを使用するのですか?

標準化のためだけですか?

役に立ちましたか?

解決

インターフェイスの目的

  • ゆるく結合したソフトウェアを作成します
  • サポート 契約による設計 (実装者はインターフェイス全体を提供する必要があります)
  • プラグ可能なソフトウェアを許可します
  • さまざまなオブジェクトが簡単に対話できるようにします
  • クラスの実装の詳細を互いに非表示にします
  • ソフトウェアの再利用を促進します

アナロジー1: :米国の宇宙シャトル、ロシアのソユーズ宇宙船と中国の深セル5は、同じドッキングインターフェイスを実装するため、すべて国際宇宙ステーションにドッキングできます。 (これは単なる例です - それが実生活で真実かどうかはわかりませんが、例のために私たちの不信を一時停止しましょう)

アナロジー2: :さまざまなコンピューターモニターを自宅のコンピューターに接続できるように。壁の大きさのテレビ、古いCRT(太い種類)、20インチのフラットスクリーン、またはブラインドのための点字マシンをタッチで「見る」ための点字マシンを接続できます。これらのさまざまな/異なるデバイスとあなたの互換性があります。コンピューターはすべてインターフェイス標準に同意するためです。

C#インターフェイスの詳細 - C#/OOPインターフェイスを使用すると、目に見えない/仮想世界で同じ種類のことをしています。

あなたは正しいです 標準化, 、 だけでなく 柔軟性, スケーラビリティ, 拡張性, 保守性, 再利用可能性, テスト可能性パワー.

(ソフトウェアインターフェイスを使用すればするほど、これらの「バズワード」が理解されます。また、現実世界のインターフェイスを常に考えてみてください。

他のヒント

インターフェイスは、実装されたことが何ができるかを説明するために使用されます。したがって、このインターフェイスのタイプと同じインターフェイスを実装するいくつかのオブジェクトを処理する可能性があります。

例えば:

public interface IMyInterface{
    public void DoFirst();
    public int DoSecond();
}


public class A : IMyInterface{
   //class has to implement DoFirst and DoSecond
   public void DoFirst(){
     Console.WriteLine("Blubb1");  
   }

   public int DoSecond(){
     Console.WriteLine("Blubb2");
     return 2;  
   }
}

public class B : IMyInterface{
   //class has to implement DoFirst and DoSecond
   public void DoFirst(){
     Console.WriteLine("Blibb1");  
   }

   public int DoSecond(){
     Console.WriteLine("Blibb2");  
     return 4;
   }
}

クラスは、いくつかの方法でインターフェイスを実装します。ただし、それらをimyinterfaceとして使用できます。例えば:

public static void DoMethodsInInterface(IMyInterface inter){
    inter.DoFirst();
    inter.DoSecond();
}


public static void main(){

   DoMethodsInInterface(new A());
   DoMethodsInInterface(new B());
   //Or use it in a List
   List<IMyInterface> interlist = new List<IMyInterface>();
   interlist.Add(new A());
   interlist.Add(new B());
   foreach(IMyInterface inter in interlist){
      inter.DoFirst();
   }

}

これがインターフェイスが役立つ理由を少し明確にすることを願っています。

それはインターフェースのためです:)、あなたがものの間でインターフェースできるように、それはあなたが持っているときに役立ちます

  • 同じものの複数の実装
  • これらのクラスがGoonnaがいくつかのことを行うことができるか、機能を持っているという何らかの慣習が必要なため、複数の異なるクラスにインターフェイスを適用するとき

これが高いレベルのビューです...

インターフェイスは、の概念に大きな役割を果たします 情報が隠れています.

彼らは基本的にあなたが隠すのを助けます 実装の詳細 呼び出しクラスがその実装に依存しないようにクラスの。したがって、インターフェイスを使用することにより、呼び出しクラスを変更せずに実装を変更できます。これはすべて順番に 複雑さを制限します あなたのコードとそれを作ります メンテナンスが簡単です 長い目で見れば。

私が最初にインターフェイスを理解し始めたとき、彼らは私に「あなたのクラスの説明を提供する契約」として説明されました。それがあなたに役立つかどうかはわかりませんが、車のインターフェイスを考えると、それはそれを言うことができます ドライブ, 休憩, 、 と ターン. 。ですから、ポイントAからポイントBに私を導く限り、それらの関数がどのように実装されているかを本当に知る必要はありません。

インターフェイスがC#/Javaのような言語で使用される主な理由は、それらの言語が複数の(クラス)継承をサポートしていないためです(参照 多発性継承の正確な問題は何ですか?).

ただし、複数の(インターフェイス)実装が許可されており、クラスを異なる方法で使用できます。

インターフェイスはやや厄介です。彼らは、同じ名前と実装されたインターフェイスを意味するだけで、信じることによって契約による設計をサポートしています。これは、APIドキュメントのおかげでのみ機能します。人間がチェックする必要があります。それにより、インターフェイスが弱くなります。それを回避する1つの方法は、正式な仕様です。一方、インターフェイスは強すぎ、厳しすぎます。しばしば再利用の邪魔になるインターフェイスを進化させることはできません。これは、メッセージ(コールメソッド)を送信する動的言語のメカニズムと、そのメッセージがレシーバーによってサポートされていない場合、標準のコールバックが呼び出されます。制約のある具体的なプロトコルを持つことは、私見よりも良いでしょう。

考え リモート...

ここにはクライアントとサーバーが関係しています。インターネットによって物理的に分離されているとしましょう。クライアントは、サーバーで実際の実行が発生するメソッドを呼び出しています。クライアントの観点から、クライアントは実行を実行するサーバー内のオブジェクトについて何も知らない。しかし、それはどの方法を呼び出すかを知っています。なぜなら、クライアントプログラムの構築中、私たちはインターフェイス(または契約)にのみさらされているからです。実際にサーバーに住んでいるオブジェクト全体にさらされていません。 .NETリモートでいくつかのデモアプリを試してみると、残りが把握できます。幸せなプログラミング。

なぜインターフェイスを使用するのですか?

一部の言語は、vtableを使用して多型メソッド呼び出しを実装し、ほとんどのタイプ情報を廃棄しているため、難しくなります いいえ インターフェイスを定義します。

したがって、言語設計に必要なため、インターフェイスを使用する場合もあります。

インターフェイスから始めることにより、 プロキシー, したがって、具体的な実装の方法を呼び出すときに、怠zyなロードまたはいくつかの検証を実行できます。

インターフェイスは、データ型を実装ロジックから分離します。

インターフェイスは、特定の動作の機能の宣言を含むプロトタイプモーダルを提供します。

また、この動作をクラスに実装したい場合は、クラスにこのインターフェイスを実装する必要があります。クラスには、この動作機能があるか、複数の動作を行うことができます。

クラスは複数のインターフェイスを実装できるためです。

他の誰かが私のようで、説明だけでなく例で学習している場合、ここにいくつかのコードがあります。

プロジェクトのダウンロードを含む、C#でのニューラルネットワークの実装を見つけました。

http://www.c-sharpcorner.com/uploadfile/rmcochran/ai_oop_neuralnet06192006090112am/ai_oop_neuralnet.aspx

以下は、インターフェイスを使用する主な理由です

  1. 拡張性
  2. 実装が隠れています
  3. インターフェイスを介してオブジェクトにアクセスします
  4. ゆるい結合。

これをご覧ください インターフェイスについて知るためのリンク ダウンロード可能なコードの例を使用して

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top