林@豆ナイトではいつもお世話になってます。です。
こんにちは、
05.3.20 1:38 AMの "Makoto Minagawa" 様からのメールです。:
> …に合致する可能なオブジェクト図のパターンは、以下の[A],[B]および[B']の
> 形のいずれかに限られてしまうことになります。
なるほど、わかりやすい解説をありがとうございます。
> というわけで、元のクラス図を考え直して私たちの常識により合致している(
> もうちょっとしっかりした)クラス図に描き直してみたとすると(たとえば)次の
> ようなモノになるでしょう。
>
> +--------+ 1 1..* +--------+
> | 町内会 |◇------------------------| 世帯主 |
> +--------+ ↑ 会員 +--------+
> | 0..1 |{subset} 1 | 会長
> +-----------------------------------+
> # 上図の関連間に引かれている線は依存関係の線(オープン・アロー・ヘッドが
> # 付いた破線)だと思って見てください。
なるほど、しかしこの{subset}の制約ってJUDEで書けないんですよねー。^^;
> 図中の{subset}というのはUMLで特別に用意されている関連間の制約で、児玉
> さんが書かれた制約文とほぼ同等な意味を持ちます。真面目にモデリングしてい
> るとこのような制約を付加しなくてはならないケースが結構出てくるので、UML
> ではあらかじめ簡易な記法が提供されているということですね。
このぐらいならOCL書かなくて済むということですね。
>> ところで、多重度未指定にして誘導可能性を片一方にする
>> っていうのは、反則でしょうか
>> ただ、この意味は会長になった世帯主自身は、自分はどの
>> 町内会の会長か知らないことになりますね。(笑)
>>
>>
>> +--------+ 1 1..* +--------+
>> | 町内会 |◇----------------| 世帯主 |
>> +--------+ 会員 +--------+
>> | ↑
>> | 1 | 会長
>> +----------------------------+
>
> 誘導可能性(ナビガビリティ)と多重度は関連に対するそれぞれ異なった側面の
> 特性を示すモノなので、基本的に無関係だと(私は)考えています。つまり、(基
> 本的に)誘導可能性を片方向にしたからと言って、片側(反対側)の多重度を未指
> 定で放っておいても良いということにはならないと思っています。
>
> 誘導可能性とは「その関連で参照する時、相手のオブジェクト群が{直接|低コ
> ストで}特定できるようにしておいてね」という指定のことで、これが片方向で
> あっても「逆方向のオブジェクト群を特定することはできない」とまでは限定し
> ていないと(私は)解釈しています。たとえば、上のクラス図の例だと、ある「世
> 帯主」オブジェクトが会長を務めている「町内会」オブジェクトは、すべての
> 「町内会」インスタンスの中から該当する「世帯主」オブジェクトを「会長」と
> して参照しているモノを探し出せば(参照コストはとても高いですが)特定するこ
> とができるでしょう。
なるほど、確かにコスト高ではありますが特定可能ですね。
> 片方向関連の反対側の多重度は「そのオブジェクトが同時にいくつの相手から
> 参照されている可能性があるか」という情報を示しています。この情報は(たと
> えば)「排他制御が必要か?」等の設計上の想定を行う場合の重要なヒントにな
> るので、明示されているに越したことはありません。
なるほど、了解しました。
私はいままで、ほとんど書いていませんでしたね。
> # 実装段階に入った時、設計モデル中にこれが明示されていない箇所が残ってい
> # る(決めきれなかった)場合は、ワースト・ケースとして「0..*」を仮定して備
> # えることが多いです。
なるほど、これもなっとくできます。
いつも、わかりやすい説明をありがとうございます。
--
Eiichi Hayashi
CENTRALSOFT Co. Ltd, Open Systems Dept.
HP: http://www.central-soft.co.jp
E-Mail: e.hayashi@....jp
TEL:03-5256-5761