2

大まかに言えば、インターフェイスに関する私の知識は次のとおりです。

  • メソッドを宣言しますが、実装しません
  • インターフェイスを実装するすべてのクラス、宣言されたすべてのメソッドを実装する必要があります

私には、これはすぐに 2 つの大きな問題を明らかにします。

  • 実装するクラスはすべてのメソッドを実装する必要があるため、これは事実上、Interface は一度使用すると変更できないことを意味します。インターフェイスでメソッドを追加または削除すると、それを使用するすべてのクラスが変更されます。答えはおそらくまさにそれです。しかし、私たちの設計がそれほど安定していることをどのように保証できるのでしょうか?

  • Interface を実装するクラスが実際にその実装で同じロジックを使用するとします。これはコードの繰り返しであり、保守が困難になります。それが基本クラスと継承のポイントではないでしょうか。

私はそれをよく理解していると思ったので、この考えにたどり着きました。私は、インターフェイスをクラスへの「ボルトオン」または「プラグイン」として考え、いくつかの追加機能を提供します。これにより、機能はそのタイプのクラスに関連付けられません。たとえば、インターフェイスは表面積を計算するメソッドを定義する可能性があります。しかし、「形状」や「建物」だけでなく、多くのものには表面積があるため、表面積を計算するために「ボルトオン」(インターフェース) を作成することは合理的と思われますが、そのインターフェースのすべての実装が同じだから、どこにメリットがあるの?これは公正なコメントですか?私は彼らが大きな利益をもたらすと確信していますが、私はまだそれを見ていません.

4

4 に答える 4

1

最初の問題に関しては、それは完全に理にかなっています。クラスがインターフェースを実装し、インターフェースが変更された場合、それらすべてを編集する必要があります。それ以外の場合、それらはインターフェイスに忠実ではありません。つまり、インターフェイスを実装するそれらに依存するクラスが壊れます。

インターフェイスは契約であり、それらを実装するクラスは、特定の機能を実装することを他のクラスに約束します。そうしないと、そもそもインターフェイスを持つという意味が失われます。

于 2013-11-13T09:03:49.060 に答える
1

最初の質問へ- インターフェイスは、システムに疎結合を提供するための手段です。役立つかもしれない 1 つの例は、HTTP プロトコルです。これは、デバイスが相互に通信できるようにするインターフェイスですが、これらのデバイスには共通点がない場合があります。PC、ラップトップ、タブレット、スマートフォン、スマート TV、デスクトップ Windows、Linux、Mac、あらゆるモバイル OS、組み込み OS などを実行しているあらゆる種類のアプライアンスを使用している可能性があります。それらは完全に異なっていても、単一のインターフェースを共有しており、お互いに簡単に話すことができます.

別の例 - イテレータ パターン。あなたは確かに複数のデータ構造を使用しており、それらを列挙したいという衝動が高まっています。イテレータは、配列、リンク リスト、キュー、スタックで同じコードを使用できるようにするインターフェイスです。したがって、何らかの理由でコレクションを変更する必要がある場合、世界の反対側でプロジェクトを壊すことなく変更できます。先ほど言及したコレクションは別の方法で実装されており、コードを共有していないことに注意してください。

2 番目の質問に対して- クラスが実際に同じ方法で単一のインターフェイスを実装している場合、そのインターフェイスを実装する基本クラスを使用しない理由はありません。たとえば、.NET から選択された次の階層を考えてみましょう。

interface IEnumerable
class Collection : IEnumerable
class ObservableCollection: Collection
class MailAddressCollection: Collection
class KeyedCollection: Collection
... about 40 other children of Collection

(わかりやすくするために一部の詳細は省略されています)

ご覧のとおり、インターフェイスの同じ実装を必要とする派生クラスは、コードが繰り返されないように、インターフェイスから直接ではなく、1 つの基本クラスから派生します。

于 2013-11-13T08:41:14.520 に答える
0

単一のインターフェースを実装する複数のクラスを持つことで、単一のメソッドを使用して、これらの異なるクラスからインスタンス化されたオブジェクトを操作する優れた方法が得られます。それらが実装するインターフェースでそれらを宣言するだけです。クラスごとに異なるメソッドを記述する代わりに。これは私が利益として私の頭の上に来る最初のものです;)

于 2013-11-13T08:38:30.187 に答える