私はインターフェイスを、それ以外の場合は共通点がないクラスに適用できる契約であると理解しています(例:Javaで同等)。しかし、どのような状況で、設計段階でインターフェースを追加するという反射がありますか?
3 に答える
静的に型付けされた言語を使用していて、開発者が代替実装を提供しながらコードを使用できるようにしたい場合は常に、つまり、そのような言語では、低い(より)結合を実現する必要があります。
厳密な型チェックではなく、原則としてダックタイピングを使用する言語(Pythonなど)では、通常、インターフェイスは必要ありません。
「インターフェースとは、そうでなければ共通点がないクラスに適用できるコントラクトであると理解しています」-それはおそらく、インターフェースとは何かについて考える方法ではありません。
インターフェイスは動作を記述し、インターフェイスを実装することは、クラスがその動作を提供するための契約を結ぶことを意味します。
実装ではなくインターフェイスにプログラミングすることで、ポリモーフィズムを有効にし、結合の少ない柔軟なコードを取得できます。たとえば、このメソッドは以下を実装する任意のインスタンスを取ることができますIQuack
。
public void DoSomething(IQuack quacker)
{
// ...
}
製品を設計していて、その製品が特定のタイプのデバイスやサービスなどとやり取りすることがわかっているが、必ずしもそのタイプであるとは限らない場合は、それらのタイプについて十分に理解している限り、インターフェイスを使用してアーキテクチャ全体を進めることができます。そのタイプの特定のデバイスで正常に使用できるインターフェイスを作成するためのデバイスの。もちろん、設計段階にいる場合は、その知識を持っている方がよいでしょう。インターフェイス宣言のみを使用して高レベルの設計を行うことは珍しくありません。良いとも悪いとも言いませんが、ソフトウェア (Rose など) を使用して UML からスケルトンを生成するのはかなり一般的な方法のようです。
もう 1 つは、使用するデバイスが正確にわかっていても、将来、そのデバイスのさまざまなタイプまたは複数のタイプを使用する必要がある可能性があると思われる場合です。
インターフェイスの 3 つ目の使用法は、重複するコードを減らすことです。これはおそらく、人々がインターフェイスの使用に熱中する唯一の場所であり、それがなければ、「これはインターフェイスであるべきか?」と尋ねないでください。しかし、「これはインターフェースになり得ますか?」。