Index: [Article Count Order] [Thread]

Date:  Thu, 17 Mar 2005 03:18:05 +0900
From:  Makoto Minagawa <kitsune@....com>
Subject:  [modeling-dojo:00232] Re: UML記述を理解できるお勧め本ありま
To:  modeling-dojo@....jp
Message-Id:  <20050317014751.CAC4.KITSUNE@....com>
In-Reply-To:  <070258C2211CD511AF2800508BB85956024F417F@....com>
References:  <070258C2211CD511AF2800508BB85956024F417F@....com>
X-Mail-Count: 00232

 ども、皆川%もうそろそろ桜の時期ですね@豆蔵です。

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

On Wed, 16 Mar 2005 20:23:12 +0900
tatsuta@....com wrote:

> 下記のクラス図を見た場合、
> 
> 「Aのインスタンスに関連している全てのBのインスタンスは
> 全て同じCのインスタンスに関連している。」
> と、解釈するのは、間違っているのですね?

 はい、そのとおりです(つまり「間違っている」が正解です)。

> そうでない場合も、下記のクラス図になりうるケースもあるのですよね?
> 
> +------+  1     *  +------+ *      1 +------+ 
> |  A   | --------- |  B   |--------- |  C   | 
> +------+           +------+          +------+ 

 上記のクラス図に合致する一般的なオブジェクト図の例は、たとえば次のよう
な感じになります(図中のオブジェクト名には下線が引かれているものとして見
てやってください)。

+------+                        +------+
| a1:A |                        | c1:C |
+------+                        +------+

+------+        +------+        +------+
| a2:A |--------| b1:B |--------| c2:C |
+------+        +------+        +------+
                                  |
+------+        +------+          |
| a3:A |--------| b2:B |----------+
+------+        +------+
     |
     |          +------+        +------+
     +----------| b3:B |--------| c3:C |
                +------+        +------+

# あぁ、メールでオブジェクト図を描くのはもどかしい…。

 関連間を跨る特別な制約が記述されていない限り、A-B間の関連とB-C間の関連
にはまったく関係がありませんから、それぞれ2種類のオブジェクト間で各々の
関連の多重度を満たしてさえいれば元のクラス図に合致するオブジェクト図にな
ります。なお、上図のa1とc1のように、AとCのインスタンスはBのインスタンス
と関係を持っていない状態のモノも存在することができるという事も忘れずにイ
メージしておきましょう。

 ちなみに、説明のために必要なロール名を加えた下記のクラス図で…

+-----+ 1       * +-----+ *       1 +-----+ 
|  A  |-----------|  B  |-----------|  C  | 
+-----+    roleBs +-----+     roleC +-----+ 

…「Aのインスタンスに関連している全てのBのインスタンスは全て同じCのイン
スタンスに関連している」という制約をOCLで記述してみると、たとえば次のよ
うな制約文になります(もちろん、同じ制約を表現するもっと他の表記も書くこ
とができます)。

context A inv:
    self.roleBs->forAll( b1 b2 | b1.roleC = b2.roleC )

 ちなみに、この制約式はAのインスタンスから見たCのインスタンスに関する片
方向の制限しかしていないので、Cのインスタンスから見たAのインスタンスに関
する同様な制約も必要かもしれません。つまり、上記の制約式だけだと「Cのイ
ンスタンスに関連している全てのBのインスタンスは全て同じAのインスタンスに
関連している」とまでは*言えない*ということですね。もし時間がありましたら、
そういう状況のオブジェクト図を描いて確かめてみてください。

> 色んな、クラス図を見て慣れるしか無いような気がしました。

 ん〜、そうですね。やっぱり「習うより慣れろ」みたいな感じで、クラス図を
パッと一瞥して、それに合致するオブジェクト図を何パターンか{描いてみる|頭
の中でイメージしてみる}…という反復練習をやってみるのがもっとも効果的だ
と思います。暗算を何回も何回も繰り返し練習していると、だんだん複雑な計算
が素早く正確にできるようになってきますよね。この「オブジェクト図を何パター
ンかイメージしてみる」というのも似たようなところがあって、何回も何回もやっ
てみると、そのうち頭の中に「オブジェクト図をイメージする」という回路が出
来上がってくるので、だんだん特別に{意識|苦労}しなくてもクラス図を見るだ
けで勝手にオブジェクト群のイメージが浮かんでくるようになってきたりします。

# クラス図にクラスの箱を一個描いたら、その箱の影で(そのクラスの)インスタ
# ンスが7個くらいフワフワ浮いているような感覚になってきたらしめたもので
# す (^_^;

 以上、このメールが何らかのお役に立ちましたら幸いです。

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