2009-08-05 5 views
60

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

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

どれ例は歓迎以上だろう:)

答えて

34

What is the difference between dependency and association?

一般に

、あなたはクラスのフィールド のようなものを表現するための関連付けを使用しています。常にその顧客のために オーダーを依頼できるという点で、リンクは常に存在します。実際にフィールドである必要はありません。より多くのインタフェースの観点から モデリングを行っている場合は、 という注文の顧客を返すメソッドが存在することを示すことができます。 一つの要素(サプライヤー)の定義の変更が他の変更( クライアント)を引き起こす可能性がある場合、「 依存関係は二つの要素の間に存在する(今ちょうど)UML蒸留の第3版から引用し

"これは非常にあいまいで一般的な関係です。そのため、 UMLにはさまざまな依存形式のステレオタイプのホストがあります。 コード用語では、パラメータ型を指定して オブジェクトを一時変数に作成することは、依存関係を意味します。

...

+6

なぜ、マーティンがあなたのためにそれほど良いのですか? +1 – Randolpho

+3

まだ私にとっては明瞭ではありませんが、私が理解したことの1つは、依存関係は関連よりやや弱いということです。アソシエーションは依存関係のサブセットであると思われますが、少なくとも私の見解では、依存関係はアソシエーションよりも強力です。それがうまく混乱の原因になっている可能性があります。 –

+0

その記事はそれをよく言っています。実際、それは私の考えと調和しています。だからここからいくつかの点を抜き取ってください:**(1)**あなたはUMLダイアグラムにすべての依存関係を表示する必要はありません。あなたは非常に選択的で、コミュニケーションしていることが何であれ重要であるものだけを示す必要があります。 **(2)** 2つのクラス間に関連がある場合は、依存関係もあります。この関連付けは一般化と同様にそれを意味します。 **依存関係を推測することは他のUML関係とのやや上位関係です** – Mahesha999

42

協会はほとんどの場合、1つの目的は、(専門用語が異なる)フィールド/プロパティ/属性として他のオブジェクトを持っていることを意味します。通常、依存関係は(必ずしもそうではないが)、オブジェクトがメソッドパラメータとして別のオブジェクトを受け入れ、インスタンス化したり、別のオブジェクトを使用したりすることを意味する。依存関係は、関連によって非常に暗示されています。

3

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

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

20

依存関係は、文字列(JavaではC#、文字列はその中のオブジェクトであるため)をパラメータとするメソッドを定義すると、クラスはStringクラスに依存します。

アソシエーションは、クラス内で文字列を属性として宣言する場合と似ています。 あなたのコードは文字列クラスに関連付けられています。ここで

String name = null //: is a association. 
7

"Association vs. Dependency vs. Aggregation vs. Composition"、あなたは、UMLのクラス図とコードスニペットと素晴​​らしいVADEのmecumを持っています。 著者は、関連、リレーションシップ、依存関係、集約、構成のリストを私たちに提供しています。OOP用語で

+0

私はこの定義が好きです。アソシエーションは:私は(別のクラスを参照するクラス)オブジェクトへの参照を保持するだけで、私はそれを使用せず、そのクラスのメンバーは私にとって興味深いものではありません。依存関係:私はいくつかのメンバーを使用しているので、参照されるクラスが変更された場合、私に影響を与える可能性があります。もし私がそれを正しく理解すれば、それは理解しやすいものでした! – robsch

+0

私はあなたのコメントを読むときに心に来た最初の質問:協会の場合 - なぜオブジェクトへの参照を保持し、それを使わないのでしょうか?参照がフィールドだけであることを意味しますか?クライアントが参照について知りたい場合にのみ返されます。 – Rabiees

18

協会 - >が有する、(メンバ変数として) Cオブジェクト

依存性 - > B(として参照をメソッドパラメータまたは戻り値の型)

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

more detailed answer

+0

@Naruto_Uzumaki集約は完全な部分の関係です。例えば、プレイリスト&ソング。関連、依存関係、集約の幅広い差別化について私の他の答えをチェックしてください。http://stackoverflow.com/a/34069760/1998422 –

+0

_UML Distilled _ _Martin Fowler_の書籍から: "クラスによって、さまざまな理由で依存関係が存在します。別のクラスへのメッセージ、あるクラスはそのデータの一部として別のクラスを持ち、あるクラスは操作のパラメータとして別のクラスを言います " –

+0

はい、それは間違いです。私の謝罪 –

9

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

協会 - (一対一、一多く、多対多)

2つのオブジェクトの間の一定の関係があることを意味

協会2の各種タイプ -

であります
  1. 組成物
  2. 集約

    1)組成 - 強いアソシエーションまたは2つのオブジェクト間の関係。あなたは、(Bのオブジェクトのみが内部で作成された私たちは、クラスAを削除した場合、Bは存在しません

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

クラス内クラスBのオブジェクトを作成しています)。

もう1つの例-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に渡されます)

this-マン&カーの別の例を存在します。男は車があるが男は&車は独立して存在する。

+0

依存関係はAssociationがクラススコープです。 – dimpiax