0

重複の可能性:
インターフェースと抽象クラス(一般的なOO)

開発チームの調整、または他の人によってさらに開発される可能性のあるコードでのそれらの利点を見ることができます。

しかし、そうでない場合、それらを使用する理由はありますか?それらを省略するとどうなりますか?

要約–インスタンス化できるようになります。問題ない。それが意味をなさない場合–私は意味がありません。

インターフェイス–とにかく、それから派生するすべてのクラスでその機能が宣言されています。

:私は彼らが何であるかを尋ねていません。私は彼らが調整以外の何かに役立つかどうか尋ねています。

4

4 に答える 4

2

どちらも私がコントラクトと呼んでいるものであり、個々の開発者は次のように使用できます。

概要

  • 異なる派生実装のポリモフィズムを可能にします。
  • 派生クラスの実装が必要かどうかを指示できる基本機能を作成できます。
  • 派生が実装されていないか、実装が必要な場合に、デフォルトの操作を実行時に消費できるようにします。
  • 基本クラスポインタが実際の派生オブジェクトを持たなくても利用できる派生オブジェクト間の一貫性を提供します。したがって、実行時操作のインターフェイスと同様に、基本クラス参照から派生オブジェクトに対する一般的な操作が可能になります。

インターフェース

  • 事実上の一般的な使用パターンを許可しますcontract of operation(s)。この使用法は、手元のプロセスを対象とすることができ、その契約の外科的に正確な操作を可能にします。
  • ファクトリパターン(返されるオブジェクト)、単体テスト中のデータのモック、および既存のクラス(たとえば、インターフェイスを返すファクトリから)を別のオブジェクトに置き換える機能を支援するために使用され、インターフェース契約の順守によるリファクタリングの苦痛をファクトリに。
  • クラスの残りの実装の静的なものから離れて簡単に理解できる使用パターンを提供します。

簡単に言えば、彼らは仕事を成し遂げるために必要ですか?いいえ。

しかし、1サイクル以上の寿命を持つシステムの設計に興味がある場合、そのアーキテクトによる先行作業は、チームであろうと個人であろうと、長期的には報われるでしょう。


++更新

私は自分が説教していることを実践していて、プロジェクトを他の開発者に渡すときは、

  1. IProcessすべての主要なビジネスクラスが準拠しているインターフェイスを見てください。そのプロセスは、定義された方法でビジネスロジックの目的と実行を理解するのに役立つ目標のシステムを定義します。
  2. プロジェクトに新しい機能を維持して追加している間、インターフェイスは実際にフローを覚えて、プロジェクトに新しいビジネスロジックを簡単に追加するのに役立ちました。
于 2012-04-04T18:30:21.890 に答える
1

抽象-子をインスタンス化できますが、さらに重要なのは、独自の抽象メソッドとフィールドを持つことができることです。

インターフェース-抽象に関してはより「大まかな」ものですが、多重継承.NETを持つことができます。したがって、インターフェースを定義することにより、インターフェースのコンシューマーがさまざまなコントラクト(インターフェース)にサブスクライブするように導くことができるため、指定されたタイプのさまざまな「形状」を提示できます。

于 2012-04-04T18:07:57.233 に答える
1

あなたが他の人と調整していないなら、それは2つのことをすると思います

  1. 自分のコードに奇妙なことをしないようにするのに役立ちます。クラスを作成し、それを複数のプロジェクトで使用することを想像してみてください。あるプロジェクトでそれを進化させて、別のプロジェクトのいとこから認識できないようにすることができます。抽象クラスまたはインターフェースがあると、関数のシグネチャの変更についてよく考えるようになります。
  2. それはあなたに将来の柔軟性を与えます-ここにたくさんの古典的な例があります。達成しようとしていることの一般的な形式を使用します。後で別の種類が必要になった場合(ストリームリーダーは良い例ですよね?)、後で簡単に実装できます。
于 2012-04-04T18:12:04.267 に答える
0

誰とも調整していなくても、どちらかの構成を使用する理由はたくさんあります。主な用途は、どちらも実際に開発者の意図を表現するのに役立つことです。これは、実際に選択したデザインを選択する理由を後で理解するのに役立つ場合があります。それらはまた、さらなる拡張性を可能にするかもしれません。

抽象クラスを使用すると、動作の一部を子クラスに委任しながら、多くの派生クラス間で共有される1つの共通の実装を定義できます。これにより、DRY(自分で繰り返さないでください)の原則により、同じコードがどこでも繰り返されるのを防ぐことができます。

インターフェイスは、クラスが1つの特定のコントラクトを実装することを表します。これは、フレームワーク内で非常に便利な用途があります。

  • 一部のインターフェイスの実装を必要とするライブラリ機能の使用。例としては、IDisposable、IEquatable、IEnumerableなどがあります。

  • ジェネリックスでの制約の使用。

  • 実際のオブジェクトをインスタンス化する必要なしに、インターフェースのモックを許可します(単体テストを行う場合)。

  • COMオブジェクトの使用

于 2012-04-04T18:37:22.430 に答える