3

クラス Tree、Node、および Edge (Edge クラスが必要です!) を使用してツリーをモデル化するアプリケーションがありますが、このクラス図で関係を表す方法がわかりません。これに関する他の記事を読みましたが、まだ疑問があります。

Tree オブジェクトには Node (そのルート) へのポインターがあり、->両端で多重度 1..1 の一方向の関連付け (Tree Node) を定義していると思います。そうですか?

各 Node オブジェクトには、そこから出てくるエッジ (Edge オブジェクト) へのポインターがあります。これらのエッジはノードが存在する場合にのみ存在するため、これは合成関連だと思います。

しかし、各 Edge オブジェクトには、エッジのターゲット ノードへのポインターがあります。->上記の Node Edge 構成を既に持っていることを考えると、この関係をどのように表すことができますか?

また、まだ読んでいる場合:)、各ノードには親ノードへのポインターがあります。ここでは、一方向の単項関連付けを使用しますが、この関係に使用する名前がわかりません。

助けてくれてありがとう。

4

4 に答える 4

1

-- Tree オブジェクトにはノード (そのルート) へのポインタがあり、両端で多重度 1..1 を持つ一方向の関連付け (ツリー -> ノード) を定義していると思います。そうですか?

いいえ、多重度は 0..1 - 1 である必要があります (すべてのノードがツリーのルートになるわけではありません)

また、Edge が本当にクラスであるかどうかも考慮する必要があります。エッジに関する情報を保存する必要がない場合 (つまり、ラベルが付けられていない場合) は、ノード間のバイナリ アソシエーションとしてエッジをモデル化するだけです。

于 2009-10-01T10:25:45.850 に答える
1

私はそれを言うだろう:

  • ツリーにはルート ノードがあります
  • ノードには子ノードがあります
  • ノードには親ノードがある場合があります

ノート:

  • UML クラス図と UML オブジェクト図を区別したい場合があります。
  • ルート ノードと子ノードが同じクラスであるかどうかはわかりません (子ノードはルート ノードのサブクラスである可能性があります。どちらのタイプのノードにも子がありますが、子ノードだけが親ノードを持つためです)。

Edge はまったくクラスではない可能性があります。代わりに、Edge は単なる Node のインスタンスである可能性があります。

于 2009-10-01T01:47:51.743 に答える
1

あなたが説明したことから、UMLクラス図には次のものが必要なようです。

Tree -> Node, aggregation, 1..0-1
Node -> Edge, aggregation, 1..*
Edge -> Node, composition, 1..2 (an edge exists only if it connects 2 nodes)
Node -> Node, aggregation, 1..1 (would be composition, except the root node doesn't point to a node.

集約と合成の違いは、寿命の観点から考えることができます。2 つのオブジェクトが相互に依存しているために存続期間が同じである場合、その関係は構成の 1 つであり、そうでない場合は集約です。

于 2009-10-01T02:25:42.663 に答える
0

OO でのツリー構造の処理は、コンポジット デザイン パターンによって解決されます。

集合と合成の違いに少し戸惑われているようですね。全体と部分の存続期間が等しい場合は複合を使用し、部分の存続期間が異なる場合、つまりコレクションから部分を追加および/または削除する場合は集約を使用します。

于 2009-10-05T18:27:17.337 に答える