依存関係と関連付け
2003年9月17日
依存関係と関連付けの違いは何ですか?
一般的に、クラス内のフィールドのようなものを表すために関連付けを使用します。リンクは常に存在し、常に注文に対して顧客を尋ねることができます。よりインターフェイスの観点からモデリングする場合、実際にはフィールドである必要はありません。注文の顧客を返すメソッドが存在することを示すだけでかまいません。
UML Distilled(現在発売中)の第3版から引用すると、「ある要素(供給者)の定義に変更があった場合、別の要素(クライアント)に変更が発生する可能性がある場合、2つの要素間に依存関係が存在します」。これは非常にあいまいで一般的な関係であり、UMLにはさまざまな依存関係の形式に対応したステレオタイプが多数ある理由です。コードの観点から言うと、パラメータ型への名前付けや一時変数でのオブジェクトの作成などは依存関係を意味します。
UMLダイアグラムにすべての依存関係を表示するのは避ける必要があります。依存関係は非常に多すぎます。非常に選択的になり、伝えたい内容にとって重要な依存関係のみを表示する必要があります。
依存関係にステレオタイプを使用することはほとんどありません。ほとんどの場合、表示したい重要なポイントは依存関係が存在することであり、種類はそれほど重要ではないことがほとんどです。
関連付けも依存関係を意味します。2つのクラス間に関連付けがある場合、依存関係もあります。ただし、依存関係をダイアグラム上の追加の線として表示するケースは考えられません。関連付けは依存関係を暗示し、一般化も同様です。
混乱の一因となったのが UML 1 に存在した、一時リンクの使用でした。これらは UML 1 でのメタモデルの問題により発生しました。これらは、「パラメータ」といったアソシエーションのステレオタイプとして現れました。永続的なスロットとメソッドのコンテキスト内だけに存在する関係の違いは非常に重要だと考えているため、私はいつもこれを嫌っていたのです。その結果、このようなステレオタイプはアソシエーションではなく依存関係に対して使用します。UML 2 では、メタモデルがメソッド スコープの関係を処理する方法が異なるため、このような問題は発生せず、そのようなステレオタイプは UML 2 ではもはや有効ではありません。