UML 表記 - 集計/構成と「バニラ」関連付け
-
16-09-2019 - |
質問
私は最近、それ以来作成したさまざまな SW コンポーネントの詳細な UML 設計を実行するのにかなりの時間を費やしました。最近終えたものを振り返り、最初に UML を学んだときと比較すると、現在は集約と構成の関係をほぼ厳密に使用しており、「バニラの」非有向/有向関係を事実上放棄していることがわかります。もちろん、私は今でも一般化と実現を使用していますが、これらは上記のものとは明らかに異なるため、この質問の一部とはみなされません。
集約/構成は、「バニラ」関連付けなどと同じ意味を暗示しているように思えます。集約と合成は当然のことながら方向を意味します。最新の UML プログラムでは、集約/合成関係の多重度を定義し、その関係に動詞を適用することもできます。その時点で、バニラの関連付けにはほとんど意味がありません。
集約と合成の違いを理解するのが難しい人もいると思います。初期の頃は、それらがどのように異なるのかを理解するのが少し難しく、バニラの関連付けを使用した理由の 1 つは混乱だったと思います。私は現在、バニラの関連付けの用途がほとんど、またはまったくないと考えています。実際、バニラの関連付けには疑問の余地があるものがあると思うので、実際に使用されるのを見るのは嫌いです (特に 2 つのオブジェクト間のライフサイクル関係の強弱)。バニラ アソシエーションが実際に使用できるのは、当面の問題の理解がまだ集約と合成の間のライフ サイクルの違いを判断できるほど進んでいない場合であると私は考えています。このような場合は、少なくとも 見せる 関係が存在しており、当面の問題をよりよく理解したときに戻って適切に変更できるということです。
簡単に言うと、人々がバニラの関連付けを使用するほとんどの場合、それらはより正確には集合体、場合によっては合成であると表現できると私は考えています。私の信念は大きく間違っているでしょうか?何かが足りないのでしょうか?聞かせてよ!
解決
あなたはの「バニラ協会」、頭の上にのみ実用化を直撃している当面の問題への理解がまだのライフサイクルの差を決定するために十分に開発されていない場合で、< EM>は関係が存在することを示して、あなたが戻ってくると、あなたはの手で問題のより良い理解を持っている場合、それを適切に変更することができます。
協会の拡張機能として集約及び組成を定義する UMLメタモデル。協会は、ドメインオブジェクトは、未精製のクラスであるのと同じように、ドメインオブジェクト間の未精製の関係を考えることができます。私は通常、ドメイン・モデリング段階でシンプルなアソシエーションを使用して、私は、詳細なクラスモデルを解決する際に、必要に応じていずれかの組成物または集約にそれを洗練ます。
他のヒント
実際には、UMLクラスモデルで団体のほとんどの場合は、集計でも組成物でもありません。出版社により出版された書籍は、この出版社の部品または構成要素ではないため、例えば、このサイト運営者に発行者によって出版された書籍を割り当てるためのクラスPublisher
とBook
との間の関連付けは、凝集も組成物でもない。
凝集が部分全体関係の意図された意味を持つ関連の特別な形態であるが、正確な意味なし(UML仕様は言う:「共有集合の正確な意味は、アプリケーション領域とモデラーによって異なり」)。エンジンは車の一部であり、講義はもちろんの一部であるため、例えば、我々はクラスCar
とEngine
間とクラスのCourse
とLecture
同士の凝集をモデル化することができます。
組成物は、いくつかの凝集体間で共有することができない(つまり、コンポーネントインスタンスは、一度に最大で1つの集約インスタンスの一部である集合の特別な形態であります)。これはCar
とEngine
間の凝集が講義が2つのコースの間で共有することができるので、組成物は(必ずしもないがCourse
とLecture
同士の凝集組成物は、(エンジンが同時に2台の間で共有することができないため)であることを意味します例えば、データベース管理コースとソフトウェア工学コース)UMLの講義を共有することができます。これは、非複合凝集の場合にも*かもしれないが凝集側で組成物の関連端の多重度は、いずれか1OR 0..1であることを意味する。
(専用部品を持っている)は、組成物のこの主な特徴に加えて、組成物は、凝集体が削除された場合、その部分の全てが削除されることを意味集約とそのコンポーネントとの間のライフサイクルの依存性が付属していてもよいですそれと。しかし、これが唯一の組成物のいくつかの例にはなく、他の人に適用され、それゆえ決定的な特徴ではありません。 UML仕様の状態:「部分は、複合インスタンスが削除される前に、複合インスタンスから除去することができるので、複合インスタンスの一部として削除されません。」カーエンジンの組成物の例では、エンジンが破壊されていないと、再使用することができ、その場合には、車が破壊される前に、エンジンが車から取り外すことができることを明確にする場合です。
クラス図では、あなたは、クラス間の静的な関係を考えています。おそらく、本当にそれだけで水をmuddiesおよび過分析の証拠である、クラス図にそれらの関係の行動の側面について考える必要はありません。 (もちろん私見)
バニラの関連付け、集約、および構成は、次のセマンティクスで説明されることがあります。
- バニラ協会:1 つのオブジェクトが 1 つ以上の他のオブジェクトを「知っている」
- 集計:1 つのオブジェクトが 1 つ以上の他のオブジェクトを「持っている」
- 構成:1 つのオブジェクトは 1 つ以上の他のオブジェクトから「構成されます」 - サブオブジェクトは構成コンテナなしでは存在できません
集約と構成の違いのほとんどは、「マスター オブジェクトがなくなったら、パーツ オブジェクトはどうなるのか?」という質問に関係します。
したがって、アイデアは、「削除カスケード時」のような整合性制約を、3 つのオプションのいずれかを使用する際の区別を使用して記述することです。UML にはこれに対応する 3 つの異なるシンボルがあります。
- 記号なし - バニラ協会
- ダイヤモンド - 集合体
- 充填ダイヤモンド - 組成
これら 3 つのオプションの問題は、特に時間の経過とともに変化する状況を見る場合、セマンティクスが実際の状況に対して十分正確ではないことです。
例えば。素朴な疑問に答えてみた 「私の車にはタイヤとホイールが何本ありますか?」さまざまな答えが導き出されます。
- 私の車に永久的に取り付けられている4つの車輪
- 緊急時に使用できるスペアタイヤ 1 つ
- 夏用または冬用のホイールで、他の季節には車に取り付けられていない 4 つのホイール
車がなくなると、これらの車輪は何個なくなるでしょうか?UML が提供する 3 つのシンボルを使用してこの状況をモデル化しようとすると、モデルが実際に何を意味するのかについて多くの議論と交渉が必要になります。aggegationと構成のシンボルを使用しない方がはるかに優れていると思いますが、代わりに、数行のテキストを使用して、可能な限り正確に関連するセマンティクスを常に説明しています。こうすることで、モデルを読んでいる人に、本当に欲しいものを明確に伝えることができます。それでも大丈夫だと思います。「車は車輪を含む部品の集合体です。」と書きます。
しかし、ここでは合成記号を使用しているのではなく、実際に何かを合成する行為を参照しています。
こちらも参照http://de.wikipedia.org/wiki/Assoziation_%28UML%29#Aggregation_und_Komposition (ドイツ人)
の両方集計および組成物は、(組成物中で優位性が強い)関係の参加者は、他の「支配する」ことを意味します。両方の参加者が同じ重要性を持っているときので、私は関係で、通常の関連付けを使用します。