2011-01-04 11 views
0

以下の2つの設計原則の違いは何ですか?設計原則

  1. 「インターフェースではなく、実装のプログラム」と
  2. は「抽象化に依存し、具体的なクラスに依存しません」。

これらの2つの原則は、同じことを2つの異なる方法で示しています。

よろしく、
マヘンドラAthneria
ムンバイインド

+0

このタイプの質問は、プログラマーにとってより良いでしょう.stackexchange.com –

答えて

6

インタフェースは具象クラスの抽象化であるので、2が1のサブセットであり、原則1.あなたはどんなのためにそれを使用することができます(より広い適用性を持っていますオブジェクト指向プログラミングで使用されるインターフェイスだけでなく、インターフェイスの種類)

+0

もし原則1を使うことができれば、それでなぜ原則2があるのでしょうか?もっと混乱を招くと思いませんか? –

+0

@Mahendra Athneria悲しいことに、それは現実です。多くの人が同じ概念を異なる名前で参照しています。私は各コンセプトにGUIDタグをつけ、データベース内で検索できるようにしたいと思っていますが、悲しいかな! –

2

彼らは本質的に同じことを別の言葉で言っています。

アイデアの具体的な実装ではなく、抽象的なアイデア(インターフェイスなど)に依存するようにクラスを作成する必要があります。これにより、全体のコードを書き直さなくても、動作を変更することができます。

Dependancy Injectionを参照してください。

例:についてBuilder design pattern読む

public class Chef : IResturauntWorker 
{ 
    // This is an example of writing to an interface instead of an 
    // an implementation. Because the Chef class implements the 
    // IResturauntWorker interface, the chef can be swapped in with other 
    // resturaunt workers like bussers or waiters. 

    public void Chop(Carrot c) 
    { 
     // code to chop a carrot 

     // this is an example of depending on an implementation 
     // because Carrot is a concrete class, this method can 
     // only be used with a Carrot 
    } 

    public void Chop(IVegetable c) 
    { 
     // code to chop a Vegetable 

     // this is an example of depending on an abstraction 
     // because IVegetable is a abstraction of an idea 
     // (a vegetable, in this case), this method can be 
     // used with any class that implements IVegetable, 
     // including carrots, celery, onions, etc. 
    } 
} 
+0

両方が異なる言葉で同じものである場合、なぜこれらの2つがデザインパターンで異なる原則ですか? –

+0

インターフェイスは抽象クラスであり、具象クラスは実装です。抽象化が容易であるようにコードを記述する必要があります。また、コード内のクラスの具体的な実装に頼って抽象化が期待されるところでは、実装を定義して使用することはできません。依存症注射に慣れていない場合は、引用した原則を実証する重要な原則として、それを研究することをお勧めします。 –

+0

私の編集例を参照してください。 –

0

。これはあなたが引用した原則の究極の例です。

+0

抽象ファクトリメソッドのようなもの。私はそれらの間で混乱してしまった。あなたはそれらの違いにいくつかの光を入れてくださいできますか? –

0

インターフェイスは、異なるタイプの実装を通信する手段を提供するだけです。 抽象メソッドを使用して汎用クラスを作成することは何もしません。

関連する問題