UMLクラス図では、関連付け関係と依存関係の違いは何ですか?
私の知る限り、関連付けは依存関係よりも強い関係ですが、それがどのように強いかはわかりません。
どんな例でも大歓迎です:)
回答:
一般に、関連付けを使用して、クラスのフィールドのようなものを表します。リンクは常にそこにあり、いつでも顧客に注文を求めることができます。実際にはフィールドである必要はありません。よりインターフェイスの観点からモデリングしている場合は、注文の顧客を返すメソッドの存在を示すことができます。
UML Distilledの第3版(現在はリリース済み)から引用すると、「一方の要素(サプライヤー)の定義を変更すると、もう一方の要素(クライアント)も変更される可能性がある場合、2つの要素間に依存関係が存在します」。これは非常にあいまいで一般的な関係であるため、UMLにはさまざまな形式の依存関係に対する多くのステレオタイプがあります。コード用語では、パラメータータイプの命名や一時変数でのオブジェクトの作成などは、依存関係を意味します。
..。
協会は、ほとんど常に1つの目的は、フィールド/プロパティ/属性(専門用語が異なる)など、他のオブジェクトを持っていることを意味します。
依存典型的には(常にではない)オブジェクトは、メソッドパラメータとして別のオブジェクトを受け入れるインスタンス化、または他のオブジェクトを使用することを意味します。依存性は非常によって暗示される団体。
依存関係-クラスの変更は、その依存クラスの変更に影響します。例-CircleはShape(インターフェース)に依存しています。Shapeを変更すると、Circleにも影響します。したがって、CircleはShapeに依存しています。
アソシエーション-2つのオブジェクト間に特定の関係があることを意味します
(1対1、1対多、多対多)
関連付けには2つのタイプがあります-
集約
1)構成-2つのオブジェクト間のより強い関連または関係。別のクラスA内にクラスBのオブジェクトを作成しています
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。人は車を持っていますが、人と車は独立して存在します。
ここで:「アソシエーションvs.ディペンデンシーvs.アグリゲーションvs.コンポジション」では、UMLクラス図とコードスニペットを備えた素晴らしいベードメカムがあります。著者は私たちに関係のリストを与えます:1つの場所での関連、依存、集約、構成。
アソシエーションとは、あるオブジェクトが別のオブジェクトへのリンクを持ち、リレーショナルオブジェクトメソッドを使用しない場合です。たとえばルビーの場合
class User
has_one :profile
end
user = User.first
profile = user.profile
profile.sign_out
これは、ユーザーからプロファイルオブジェクトを取得できるが、ユーザーは自分の内部でプロファイルのメソッドを使用しないことを意味します(プロファイルのインターフェイスに依存しません)。
依存関係とは、ユーザーが別のオブジェクトにリンクし、そのオブジェクトのメソッドを自分の内部で呼び出すことを意味します
class User
has_one :profile
def personal_info
profile.info
end
end
ここで、プロファイルのinfoメソッドが変更または名前変更される場合は、依存ユーザークラスも変更する必要があります。