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

» 2004年08月31日 12時00分 公開
[羽生田栄一(豆蔵 取締役会長), 岡村敦彦(豆蔵),@IT]
前のページへ 1|2|3|4       

コンポジションに関するまとめ

 ここで、冒頭の定義に言葉を追加して、もう少し的確に表現してみましょう。

  • 全体側は部分側を保持している期間のライフサイクルを管理
  • 時間を同一にする部分側の共有は不可

関連クラスの誤解

 では最後に、関連クラスについて落とし穴を述べておきましょう。

 関連クラスというのは、オブジェクト間のリンク自体を実体として扱おうということですから、関連クラスのインスタンスは、リンクでもありオブジェクトでもある両義的な存在です。重要なことは、関連クラスも関連の性質(制約)を受け継ぐということです。ですから、関連クラスのインスタンスは両端のオブジェクトなしには存在できないオブジェクトです。

 UMLの難しい概念を覚えると使ってみたくなるのが人情のようで、よく次のような関連クラスを適用したクラス図を見かけます。では皆さんに問題です。この図のどこが誤りでしょうか。

ALT 図6 誤った関連クラスの適用を含むクラス図の例(図書と利用者の間の貸出)

 関連クラスのインスタンスは両端のオブジェクトなしには存在できないオブジェクトであると、先ほどいいました。これはいい換えると、関連クラスのインスタンスは両端の参加クラスのインスタンスが特定されれば一意に定まる、ということを意味します。では、この点に注意していまの図を確認してみましょう。図書のインスタンス「砂の器393901」と利用者「田中退屈男041234」が特定されたとして、その両者の間の「貸出」クラスのインスタンスは一意に定まるでしょうか? 実は定まりません。同じ利用者が同じ本を時期を違えて借りることは許されているし、実際にあり得るからです。つまり、田中退屈男さんは物理的にも同じ「砂の器」の本を2回、貸出0404010001と貸出0404210123と借りているかもしれないのです。

 では、正しく適用された関連クラスの例を以下に示しておきます。

ALT 図7 正しく適用された関連クラスの例(販売と商品品目との間の販売明細)

 関連クラスは普通のプログラミング言語には概念自体が存在しませんから、そのままでは実装できませんので、設計時に通常のクラスに置き換えます。以下のように置き換わることになります。多重度の位置がタスキ形に入れ替わるので注意してください。

ALT 図8 関連クラスと対応する通常クラスによる置換

最後に問題を1題

 では、最後に問題を出しておきます。いまの図で、通常クラスによる置換では実は、関連クラスで表せていた意味(制約)はすべて表し切れていません。このクラス図だけだと、意図していないオブジェクト図も導出できてしまいます。さて、どのような制約をこのクラス図に追加すれば、元の関連クラスによるクラス図と同等の意味になるでしょうか。ちょっと難しい問題ですが考えてみてください。回答は、この連載のOCLを取り扱う章で提示します。

UML 2.0 とクラス図

 クラス図は、UML のダイヤグラムの中でも最も多く使われている図です。従って、基本的にはこれまでのUML 1.x までのときと根本的に異なるような変更はないようにしています。しかしながら、より厳密性を重視した方向性のため、従来との互換性を保ちながらも気を付けないと意味を取り違えられてしまう可能性もないとはいえません。

 例えば、今回の連載に関連したところ、つまり関連に関連する話では、誘導性があります。従来の関連において、矢印の付かない通常の実線の場合は、双方向を意味していました。しかし、2.0 からは、それは未定義、つまり決まっていない、ということを示すようになります。双方向であることを明示するには、ナビゲーションの矢印を両方の関連端に記述する必要があります。では、片方向はどうでしょうか。従来の片方向は、一方だけに矢印を付けたものでしたが、それは 2.0 からでは、片方は未定義、という扱いになります。もう一方から参照できないことを明確にするためには、×印を付けます。従来の双方向のつもりで書いていると、受け取った人は未定義なので自分なりの解釈を加えてしまうかもしれませんので、気を付けてください。



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

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ