UML における関連の定義

UMLのクラス図に登場する「関連クラス」はわかりにくい。オブジェクト図を描いてもなかなか直感的にイメージできない難物だが、同じ内容のデータモデルと突き合わせることで意味が明確になる。その過程で、データモデリングにおいて識別子を重要視することの意義もわかってくる。

渡辺さんというか,なべQさんとは nifty 時代に何度か議論したことがあるのですが,まるっきり意見が合わないというか価値観が違いすぎるというかどこまで行っても平行線だった記憶ばかり残っています (苦笑).
そんなわけで (どんなわけで?),ここでこの話題を取り上げるのもなべQさんに向けてというより,上記アーティクルを読んだ人が UML に対して誤解しないようにということなのでそこんとこよろしくです.なんか最近こんなのが多い気がするな (これまた苦笑).


そもそも「オブジェクト図」じゃなくて「クラス図」だろっていうのはともかくとして直リン.

いっぽう、親子関係(下)の場合、E3においてd1とd3の値の組み合わせが重複することは許されない。E3の識別子がd1+d3の具体値の組み合わせがユニークであることを要求しているためだ。

UML では,E1 と E2 を関連の線で直接つないだ時点で「E3においてd1とd3の値の組み合わせが重複することは許されない」ことが定まります.
以下は「UML仕様書」の「2.5.2.2 Association(関連)」に示された UML における関連の定義です.

関連は,分類子間の意味的関係を定義する.関連のインスタンスは,分類子のインスタンスに関係するタプルの集合とする.各タプルの値は,多くとも一度しか出現しない.

「分類子のインスタンスに関係するタプル」とは要するに「d1とd3の値の組み合わせ」のようなものです.関連はこのようなタプルの集合 (set) であり,重複は許されないということが明白に定められているのです.
そして関連クラスは「それ自体もクラスである関連」に過ぎません.

このように、インスタンスレベルでの参照関係と親子関係の違いは明らかなのだが、関連クラスを用いた場合と用いない場合での違いを「オブジェクト図」で表すことは困難だ。それは他でもなく、オブジェクトモデリングでは、インスタンスを識別するデータ項目が明示的に扱われないためだ。

UML における関連を理解していれば,上記アーティクルで取り上げられている制約をオブジェクト図というかクラス図で表すことは別に困難なことではありません.データ項目が明示的に扱われているかどうかは (このケースでは) 全く無関係です.ご注意ください.