「関連」や「関係」の落とし穴(前編)UML BASIC LECTURE(1/4 ページ)

» 2004年08月31日 12時00分 公開
[羽生田栄一(豆蔵 取締役会長), 岡村敦彦(豆蔵),@IT]

関連の多重度とオブジェクト図

 第2回「クラス図の落とし穴」でも述べたように、クラスの意味はそれがどんな「関連」によってほかのクラスとつながっているかということに依存して決まります。クラス図においてそのくらい関連は重要なわけです。関連にまつわる落とし穴はいくつかありますが、基本は、悩んだらインスタンスレベルの「オブジェクト図」を描いて具体例で判断する、というのが鉄則です。こうすればほとんどの誤解から逃れられます。ちなみに、関連はクラスレベルのモデル要素、それに対応するインスタンスレベルは「リンク」と呼ばれるので覚えておくとよいでしょう。

 ここでは、関連の多重度にまつわる落とし穴を整理しておきましょう。

 多重度とは、その関連に参加する両側のクラスのインスタンス同士の数量的な制約のことです。従って、片側のクラスのインスタンスを1個固定したときに相手側のクラスの多重度はそのインスタンスが何個対応するかを表しています。このように「関連」の参加クラスを片側ずつ考えていくことがコツです。決して、1対1、1対多、多対1、多対多というふうに同時に考えないことです。誤りのもとです。

 ときどき、多重度を誤解して、例えばクラスAからクラスBに対して多重度3の関連Rが張られているときに、Rのインスタンスであるリンクr1やr2はフォークのように先が3つまたになっているイメージを持つ人がいます。大きな誤りです。関連Rのインスタンスであるリンクriは、必ず関連Rの参加クラスAとBのそれぞれのインスタンスajとbkをつなぐ1本の「リンク」です。

ALT 図1 クラス図の関連の解釈:フォークおよび正しいリンク

 同様に、多重度「0..:」のとき、多重度0は対応するリンクは存在しない場合があるということを示しています。勘違いして、先端にオブジェクトの付いていないリンクをイメージしたりしないでください。リンクが「ない」のが正しい解釈です。

ALT 図2 多重度が0を含む場合の誤ったリンクの解釈

 以上から分かるように、関連というのは、その両端のクラスが存在して初めてそれらに依存して定義できるモデル要素だということです。つまりリンクとはあくまでも両端のオブジェクトに寄生(依存)して存在できるものなのです。これを忘れないでください。

関連と集約、コンポジション

 関連の基礎が分かったところで、次はコンポジションを考えてみましょう。

 コンポジション(もしくはコンポジット集約)は、通常の集約(Aggregation)の特別な場合と認識されていて、その違いは主に以下の2点です。

  • 全体側と部分側のライフサイクルが一致
  • 部分側の共有は不可

 この理解はおおむね正しいといえますが、よく考えてみるといまひとつ不明りょうな部分があることに気付く人も多いと思います。今回はそこを明らかにしてみることにします。

 まず復習として、コンポジションを含めて関連や関係とは何かを思い出してみましょう。前述のように、コンポジションは集約の特別な場合に使われますが、集約も実は、関連の特別なケースにおいて用いられます。関連とは、いうまでもなく関係の中の一種です。「関係」と「関連」という用語は、日本語では非常によく似た考え方ですので混同してしまいやすいのですが、UMLにおいては別の概念ですので、注意が必要です。

関係:モデル要素間の意味的なつながり

関連:インスタンス間につながりのある意味的な関係

 定義を見てもやっぱり同じように感じてしまうかもしれませんが、要するに「関係」は抽象的、「関連」は具体的と考えるともう少し分かってくるかもしれません。そして「関連」にもいくつかのバリエーションがあることになります。

 つまり、「関連」(Relationship)→「関連」(Association)→「集約」(Aggregation)→「コンポジション」(Composition)という関係です。この関係は推移的ですので、コンポジションはもちろん関連の一種、ということになります。せっかくですので、UMLにおいて関係を表記する記法の「関係」を UML で表現してみましょう。以下のようになります。

ALT 図3 関係のUML的表現

 やはり視覚的に表現されたものは分かりやすいですね。UMLはなんて便利なんでしょう、という話は置いておいて、表記の種類は上図のようにまとめることができます。

 こうしてみると、コンポジションの位置が一目瞭然です。

       1|2|3|4 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ