Index: [Article Count Order] [Thread]

Date:  Tue, 15 Mar 2005 03:01:51 +0900
From:  Makoto Minagawa <kitsune@....com>
Subject:  [modeling-dojo:00217] Re: 関連のロール名
To:  modeling-dojo@....jp
Message-Id:  <20050315023015.CCC0.KITSUNE@....com>
In-Reply-To:  <4234F983.2040202@....jp>
References:  <20050314025807.0F14.KITSUNE@....com> <4234F983.2040202@....jp>
X-Mail-Count: 00217

 ども、皆川%花粉症予備軍@豆蔵です。

# 例によってメールの引用部分を一部削らせていただいています。

On Mon, 14 Mar 2005 11:40:03 +0900
Yuji Ito <y_ito@....jp> wrote:

> Javaでの実装を考えますと
> 
> Class 男
> 	女[] 有り難い女神様達;
> 
> Class 女
> 	男[] ばら撒き先;
> 
> という感じなのでしょうか?
> 荒い解釈ではロール名=変数名で良いのでしょうか?
> (関連名はコード上には現れない。)

 扱っているモデルのレベルによって解釈が異なる場合がありますし、UMLは今
のところ実装言語へのマッピング方法まで規定していないので、「必ずそうなり
ます」とは言えません。が、設計レベル以降でJavaのような実装言語を想定する
なら、たいていの場合ロール名はそのままインスタンス変数名にマッピングされ
て実装されることが多いです。

# 私も根がプログラマなので、関連にロール名を付ける時には暗にインスタンス
# 変数名として座りが良い名前を選んで付けるようにしています。

 UMLでの設計モデルとJava実装とのマッピング方法については、ウチ(豆蔵)の
井上が書いた以下の記事などが参考になるかもしれません(少し古いですが)。

http://www.mamezou.com/tec/design006.htm
    UML → Java マッピング
    〜設計モデルと実装システムのギャップをなくす最善策〜

> 多重度が1という事は、
> Class 男
> 	女 妻;
> 
> Class 女
> 	男 夫;
> 
> ではなくて、
> Class 男
> 	女 妻 = New 女();
> 
> Class 女
> 	男 夫 = New 男();
> 
> もしくはコンストラクタ内で相手もインスタンス化する
> という感じでしょうか?

 はい。だいたいこのような感じになると思います。が、この関係(結婚してい
る)が双方向関連である場合、上記のコードだと片方向しか参照関係が確立しな
いのでもう少し工夫が必要になりますね。このような場合、二つのオブジェクト
間で双方向の参照関係が同時に成り立つ(もしくは同時に切断される)ようなコー
ドを書く必要があります。Javaでの簡単なサンプルは上記の井上の記事の一部に
含まれていますし、そのようなコーディング・イディオムをもう少し一般化した
テクニックである「ダブル・ディスパッチ」の解説が弊社の以下のページにあり
ます(この記事も少し古いですが)。

http://www.mamezou.com/tec/equip006.htm
    Double Dispatch
    〜 典型的なオブジェクト指向プログラミング・テクニック 〜

 以上、かなり実装寄りな話になってしまいましたが、このメールが何らかのお
役に立ちましたら幸いです。

P.S.

> (片方が他界してもすぐ次の相手が必要、とか
> 色々考えてしまいます。悲しい・・・)

 男女の関係は簡単にモデリングできるようなものではないのですよ、きっと…。

--
  /|/|  ▲      皆川 誠 @ 株式会社 豆蔵
 /    ノ /  }      「きつねはコンと鳴く」
 |// ノ /   |   会社用: kitsune@....com
 =o=|\|   /    自宅用: kitsune-san@....com
   く  |  /     携帯用: kitsunex@....jp
    ■■■■