web-dev-qa-db-ja.com

関連付けと依存関係の違いは?

UMLクラス図では、関連関係と依存関係の違いは何ですか?

私が知っていることから、関連付けは依存関係よりも強い関係ですが、どのように強いかはわかりません。

どんな例でも歓迎です:)

78
Charlie

依存関係と関連付けの違いは何ですか?

一般に、関連付けを使用して、クラスのフィールドのようなものを表します。リンクは常にそこにあり、顧客に注文をいつでも依頼できます。実際にフィールドである必要はありません。よりインターフェイスの観点からモデリングしている場合、注文の顧客を返すメソッドの存在を示すことができます。

UML Distilledの第3版(引用)から引用すると、「一方の要素(サプライヤー)の定義の変更が他方(クライアント)の変更を引き起こす可能性がある場合、2つの要素間に依存関係が存在します」これは非常に曖昧で一般的な関係であるため、UMLにはさまざまな形式の依存関係に対するステレオタイプのホストがあります。コード用語では、パラメータタイプの命名や一時変数でのオブジェクトの作成などは、依存関係を意味します。

...

45
Mitch Wheat

関連付けは、ほとんどの場合、1つのオブジェクトがフィールド/プロパティ/属性として他のオブジェクトを持っていることを意味します(用語は異なります)。

dependencyは、通常(常にではないが)、オブジェクトがメソッドパラメーターとして別のオブジェクトを受け入れる、インスタンス化する、または別のオブジェクトを使用することを意味します。 依存関係は、関連付けによって暗示されます。

58
Randolpho

In OOP用語:

関連付け->Ahas-aCオブジェクト(メンバー変数として)

依存関係->AreferencesB(メソッドのパラメーターまたは戻り値の型として)

public class A {
    private C c;
    public void myMethod(B b) {
        b.callMethod();
    }
}

詳細な回答 もあります。

37

依存関係は、String(JavaではC#、stringはその中のオブジェクトです)をパラメーターとして取るメソッドを定義し、クラスがStringクラスに依存しているようなものです。

関連付けは、文字列をクラスの属性として宣言するときのようなものです。コードは文字列クラスに関連付けられます。

String name = null //: is a association.
22
Shrikant Mali

依存関係-クラスの変更は、その依存クラスの変更に影響します。例-CircleはShape(インターフェイス)に依存しています。 Shapeを変更すると、Circleも影響を受けます。したがって、CircleはShapeに依存しています。

関連付け-は、2つのオブジェクト間に特定の関係があることを意味します

(1対1、1対多、多対多)

関連付けは2種類あります-

  1. 組成
  2. 集計

    1)構成-より強い関連付けまたは2つのオブジェクト間の関係。 クラスBのオブジェクトを別のオブジェクトの中に作成していますクラスA

 public class A {
       B b;
       public void setB(){
         this.b= new B();
        }
     }

クラスAを削除すると、Bは存在しません(BオブジェクトはA内にのみ作成されます)。

別の例-Body&Liver .LiverはBodyの外部には存在できません。

2)集約-より弱いタイプの関連付け 2つのオブジェクト間。

public class A {       
             B b;
             public void setB(B b_ref){
                 this.b= b_ref;   
                /* object B is passed as an argument of a method */
              }
   }

クラスAを削除しても、Bは外部に存在します(Bは外部で作成され、クラスAに渡されます)

これの別の例-Man&Car。人は車を持っていますが、人と車は独立して存在しています。

14
Deen John

ここに: 「関連付けvs.依存性vs.集約vs.合成」 、あなたはumlクラス図とコードスニペットで素晴らしいvade mecumを持っています。著者は、関連性のリストを提供します:関連付け、依存関係、集約、構成。

9
Raf

依存関係は非常に一般的であり、複雑さを減らすことは、依存関係を可能な限り減らすことです。

関連付けは、強力な(静的な)依存関係です。集約と構成はさらに強力です。

3