Index: [Article Count Order] [Thread]

Date:  Fri, 22 Apr 2005 18:36:55 +0900
From:  Makoto Minagawa <kitsune@....com>
Subject:  [modeling-dojo:00352] Re: パワータイプに関して質問
To:  modeling-dojo@....jp
Message-Id:  <20050422174020.3C90.KITSUNE@....com>
In-Reply-To:  <200504220733.AA05377@....jp>
References:  <20050422042712.8254.qmail@....jp> <200504220733.AA05377@....jp>
X-Mail-Count: 00352

 ども、皆川%今日は珍しく深夜じゃない投稿@豆蔵です。

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

On Fri, 22 Apr 2005 16:33:55 +0900
Kiminobu Kodama <kiminobu-kodama@....jp> wrote:

>  「[modeling-dojo:00344] Re: パワータイプに関して質問」のお返事させていただきます。
> 
>    >1:
>    >これは、
>    >{Bug}という制約をかけたら、
>    >関連は(関連オブジェクトも)
>    >同一両端オブジェクト間で
>    >重複させても「いい」ぞ、
>    >ということなんでしょうか?
> 
>  はい,そういうことです。ただし,バグがありました{Bag}です。つい
> いつも使い慣れている方で書いてしまいました(^^;;。

 ちょっとだけ補足情報を…。

# ここまでの話の流れだと{bag}や{sequence}などが関連全体に掛かるモノだと
# 勘違いしてしまう方が出てきてしまいそうかな…と思いまして…。

 最新のOMGの仕様書 "ptc/04-10-02: UML 2.0 Superstructure Specification" 
の "7.3.3 Association (from Kernel)" の章を読んでみると、{orderd}や{bag}
や{sequence}などは関連端(Association End)に掛かるプロパティである…とい
うような事が書かれています。たとえば…

    +--------+ 0..*      {bag} +--------+
    | ClassA |-----------------| ClassB |
    +--------+            0..* +--------+

…というようなクラス図があった場合、「ClassA」のインスタンスから見た
「ClassB」のインスタンスのコレクションは重複を許します({bag}と指定されて
いるから)が、「ClassB」のインスタンスから見た「ClassA」のインスタンスの
コレクションには重複がありません(特に指定が無いのでデフォルトの{set}とし
て解釈される)。

 このような感じで、{orderd}{bag}{sequence}などのプロパティは関連の片方
向のオブジェクト群の{参照|保持}の仕方を指定するものです。

 で、上記の章の "Semantics" の節には次のような記述があります。

------------------------------------------------------------------------
An association declares that there can be links between instances of
the associated types. A link is a tuple with one value for each end of
the association, where each value is an instance of the type of the end.

When one or more ends of the association have isUnique=false, it is
possible to have several links associating the same set of instances. In
such a case, links carry an additional identifier apart from their end
values.

When one or more ends of the association are ordered, links carry
ordering information in addition to their end values.
------------------------------------------------------------------------
"UML 2.0 Superstructure Specification", "7.3.3 Association (from Kernel)" 
より一部引用

 二番目のパラグラフで、どういう時にリンク(関連インスタンス)の重複が起こ
り得るか…という事が明記されていますね。

 で、これに関係する "isUnique" とか "isOrdered" の対応関係については、
同仕様書の "7.3.44 Property (from Kernel, AssociationClasses)" で示され
ていて、次のようになっています。

------------------------------------------------------------------------

    +-----------+----------+-----------------+
    | isOrdered | isUnique | Collection type |
    +===========+==========+=================+
    | false     | true     | Set             |
    +-----------+----------+-----------------+
    | true      | true     | OrderedSet      |
    +-----------+----------+-----------------+
    | false     | false    | Bag             |
    +-----------+----------+-----------------+
    | true      | false    | Sequence        |
    +-----------+----------+-----------------+

------------------------------------------------------------------------
"UML 2.0 Superstructure Specification", "7.3.44 Property (from Kernel,
AssociationClasses)",  "Table 6 - Collection types for properties" より
引用

 このくらいの部分を知っていれば、{ordered}, {bag}, {sequence} などが正
確に使いこなせるようになって、より実践的な関連の使い方ができるようになり
ますよね(きっと)。

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