4

私は次の関係を持っています:


ルート * ------ * RouteLeg


Route は複数の RouteLegs で構成されているため、これを Aggregation にしたいと思います。

ただし、Route を削除しても、RouteLegs は他の Route で使用されている可能性があるため、必ずしも削除されるとは限りません (ただし、ほとんどの場合は削除されます)。

この関係を集約として示すのは適切ですか?

このような:


Route * <>---- * RouteLeg


Jim Arlow の「UML 2 and the Unified Process: Practical Object-Oriented Analysis and Design」という本の中で、多対多の関係を集約とは見なしていないため、私はこの疑問を抱いていますが、それは理にかなっています。私に...

多対多の集計が可能であるという証拠はありますか? よろしくお願いします。

4

4 に答える 4

3

Arlow は、多対多の関係が集合体になることはできないとは言いません。実際、彼はこれについて例を挙げています:


商品 *<>---- * 商品


初めて気付かなかったのがおかしい…返信ありがとう。

問題が解決しました。

于 2010-11-01T19:29:55.450 に答える
2

Arlow が言ったように、多対多は集約にうまく適合しません。集約は、部分と全体の関係を表します。それは「has a」動詞によって言語化されます。したがって、多対多の関係を集約としてモデル化すると、誤った設計が導入されます。

ソリューションは、設計上の決定によって異なります。Route-RouteLeg の関係は、1 対多の関係に近いと思います。ルートには 1 つ (または複数) の RouteLeg がありますが、RouteLeg は複数のルートに適合していないようです。

[ルート](1)<>---- (1..*)[ルートレッグ]

それ以外の場合は、それを単なる関連付けに分離することを選択できます

[ルート](0..*)----(1..*)[ルートレッグ]

于 2010-10-31T17:44:51.233 に答える
1

多対多の関係では集計は意味をなさないため、これは関連付けです。アグリゲーションでは、通常、一方の側にはゼロ以上の他方があり、もう一方の側は厳密に 1 つのアグリゲートに属します。RouteLeg がおそらく少なくとも 1 つのルートに属しているという事実を除いて、どちらの側も実際には他方を制御しない多対多の関係があります。ただし、RouteLeg は複数のルートで共有される可能性があるため、単一のルートに属していないか、制御されていない可能性があります。指定された 2 つのタイプの間の正しい「接続」であるため、関連付けに固執する必要があります。

于 2010-10-31T17:43:35.650 に答える
0

アグリゲーションはアソシエーションよりも強い関係ですが、コンポジションよりは弱いです。コンポジションでは、全体とパーツオブジェクトの寿命がリンクされます(全体を削除する場合は、パーツも削除する必要があります)が、これは必ずしも集約の場合には当てはまりません。

したがって、理論的には、集計を使用してシナリオを表すことができます

于 2010-11-01T05:37:44.080 に答える