@IT情報マネジメント会議室は、2009年4月15日に新システムに移行しました。
新たに書き込みを行う場合には、新しい会議室をご利用ください。
- PR -

UML:関連クラスの誤解について

投稿者投稿内容
guion
常連さん
会議室デビュー日: 2004/12/24
投稿数: 30
投稿日時: 2004-12-25 11:04
引用:

ukさんの書き込み (2004-12-14 16:55) より:
「これはいい換えると、関連クラスのインスタンスは両端の参加クラスのインスタンスが特定
されれば一意に定まる、ということを意味します。」とありますが、関連クラスにそんな
制約があったでしょうか。



さっきも書きましたが、制約が有るかどうか?については、
(私は)「疑問」は持っていません。
何故なら、定義者が勝手に定義すればそれまでだから(^^;。
#そしてその定義が秀逸である保証は何処にもない…

ところで私は、@IT記事の上記の部分について、別の疑問を持ちました。
というのは、記事の文章自体が論理的に変じゃないか?と思ったので。

引用:

関連クラスのインスタンスは両端のオブジェクトなしには存在できないオブジェクトである <=[1]
と、先ほどいいました。これはいい換えると、
関連クラスのインスタンスは両端の参加クラスのインスタンスが特定されれば一意に定まる <=[2]
、ということを意味します。


(番号を添えたのは私)

元記事はこうなっていますが、私が思うに、1から2は導けないんじゃないでしょうか?
そして結果として、関連インスタンスは一意に定まらないのではないでしょうか?

1によって言えるのは、対偶(っていうんでしたっけ?)を使うと、

「もし関連インスタンスが存在すれば、そこには両端オブジェクトが有る」

です。
そこでは、関連インスタンスの「個数」について何も言及してない、ですよね?
関連インスタンスが1つであろうと2つであろうと3つであろうと、上記の話に反しない
ように思えるんですが、どうでしょう?

直感的に考えても変です。
2つの点の間に線が何本引けますか?っていう問題です。
そりゃ、ユークリッド空間だとか、直線しか使っちゃいけないとか、
重なっちゃった線は同一視しますよとか、
そういうルールが有るならば、「1本です」としか言えないんですが、
我らがオブジェクト空間(?)はユークリッド空間である義務もないし、
線は(オブジェクトであるならば)直線に喩えられるものである義務も無いし、
重なった線の識別性も、(先ほど別の文で書いたように)オブジェクト化すれば識別できますし。

というか、ほら。日常生活でも、
2つの点の間に2本以上の紐を渡すことって、幾らでも有りますよね?
私んちのベランダでも、正にそんな物干し紐(?)が張られてます。
(補強のために二重化したんですけどね。)

…と思いました。
どうでしょう?
skulker
ベテラン
会議室デビュー日: 2004/06/08
投稿数: 67
投稿日時: 2004-12-25 14:26
引用:

guionさんの書き込み (2004-12-25 10:31) より:
UMLの下でモデリングする限りは、複数の関連オブジェクトを同一ノード間には引けない、


関連クラスの制約が自分の意図とあわないなら、普通のクラスを使えばいくらでも関連の線は引けます。
関連クラスのセマンティクスについて、人によって考えがまちまちだったので、UMLではunifyしたというだけです。
引用:

引用:

関連クラスは通常の関連に制約を与えます。
その制約のひとつがこれです。



えーと。制約という語の(ここ(もしかしてUML?)での)意味を
よく理解してないんですが、
自分が日ごろ馴染んだ意味だとすると、
「通常の関連は関連クラスに制約を与えます」
という言い方のほうがすっきり来るんですが、どうでしょうか?

つまり、

関連<|---関連クラス

みたいな継承関係なのかなーと。


サブクラスはスーパークラスを特殊化したものですよ。
関連クラスは関連の特殊化したもののひとつなので、関連クラスは通常の関連に制約を与えるという表現で正しいです。

[ メッセージ編集済み 編集者: skulker 編集日時 2004-12-25 14:26 ]
guion
常連さん
会議室デビュー日: 2004/12/24
投稿数: 30
投稿日時: 2004-12-25 17:34
引用:

skulkerさんの書き込み (2004-12-25 14:26) より:
関連クラスの制約が自分の意図とあわないなら、普通のクラスを使えばいくらでも関連の線は引けます。



それはそうなのですが、
モデリング言語統一という壮大な構想(^^;であるUMLの概念空間の中で、
「関連クラス」という名称を占めてしまった概念が、

使いにくい

ってのは、かなり悲しむべきことなんじゃないでしょうか?

普通のクラスを使うなんていう「不便」なことは、したくないじゃないですか(^^;。
その言語に搭載されてるソレは、関連であり、かつクラスであるのは確かです。
一方UMLに「関連クラス」というイカにもそれっぽいものが既にあるわけです。
じゃあそれを「素直」に使いたいのが人情じゃないですか。

#UMLって、図言語にすることで直感的に判りやすくする、のが主眼だったんじゃないんだろうか?
#ところが実際にはこんなふうに「定義の厳密さ」に振り回されることになるってのは
#ちょっとした皮肉ではあります。
#まあ、「スケッチUML派」になればいいのですが、自分の好きにやるときはともかく、
#仕事でやるときには周囲の人との兼ね合いも有るんで…

ちなみに具体的な話になりますが、
私は、関連クラス(関連オブジェクト)が最初から用意されているという、
ちょっと変わった言語(^^;を扱ってるんです。
#UMLなんかより随分長い歴史を持つんで、UMLのセマンティクスと無関係な代物です。
で、そいつ用のクラスを作る(設計する)ときに、
UMLで(UMLツールは普及してますからね)関連クラスを描きたいわけです。
ところが、その言語では幾らでもやれてる「多重化された関連クラス」が
UMLでは描けないときたもんだ。
そんなわけで、まあ、困っているわけです。
クラス図(みたいなもの)を描くツールが無いということになるんで。

世の中に、UMLと競合するライバルが他にも幾つか有るっていうなら、
「使いにくいなら乗り換えるわい」で話は済むんですが。(^^;

引用:

関連クラスのセマンティクスについて、人によって考えがまちまちだったので、UMLではunifyしたというだけです。



うーん。私がさっき書いた件については、
「まちまち」になりにくいんじゃないか?と思ってるんですが…。

引用:

>関連<|---関連クラス

>みたいな継承関係なのかなーと。

サブクラスはスーパークラスを特殊化したものですよ。
関連クラスは関連の特殊化したもののひとつなので、関連クラスは通常の関連に制約を与えるという表現で正しいです。



あ。なんか判ったような気がします。
仰りたいことは「関連クラスは通常の関連に制約を与えたものである」といったところでしょうか。
それなら了解です。

関連クラスは(上位クラスである)関連へ、「どんな」影響も、与える事は出来ませんよね?
ところが「関連クラスは(中略)を与える」だと、関連クラスが何かをされたことになっちゃうんで、
おかしなことになると思いますもんで…。
object
ぬし
会議室デビュー日: 2002/03/20
投稿数: 338
お住まい・勤務地: 香川県高松市
投稿日時: 2004-12-26 12:17
objectです。

「関連クラス」に関して、
私が理解している内容で、私なりに少し補足します。
#間違っていれば、指摘して下さい。

「関連クラス」という概念には、
関連に「含まれる情報」を保持する
#「広義」の関連クラス

関連に「関する情報」を保持する
#「狭義」の関連クラス
#つまり、関連以外の情報を含んではいけない。
があると思います。

そして、
「UML」では
「狭義の関連クラス」
を「関連クラス」と呼んでいる
という事だと思います。

ここで、問題なのは、
「関連クラス」という言葉に対して
殆どの人が
「広義」の意味に理解する
という事実だと思います。

「関連クラス」が意識される状況を考えると、
関連を「クラス」として「認識・表現」する必要性が生じている
という「状況自体が重要」である
と私は思います。
#つまり、「関連」自体が独立したものとして意識されているという事。

従って、本来は
広義の「関連クラス」=「関連クラス」
狭義の「関連クラス」=「純関連クラス」
等の命名が良かったんでしょうね。
#広義の「関連クラス」に「明確な名前」を付与する事は重要だと私は思っています。

それから、
引用:

guionさんの書き込み (2004-12-25 10:31) より:

不便というか、無意味な制約だと思います。
だってそうする必然が無い。

関連の線(UML用語でいえばリンクでしょうか)が
オブジェクトじゃなく単なる線であるうちは、
2つのノードの間に複数の線を引くと「識別不能」に陥るので
複数引くことを禁止する必要(論理的必然性)がありますが、
関連の線をオブジェクトにしてしまえば、
複数の線を区別することは容易です。
(↑そのためのオブジェクト指向だ、とも言います(^^;。個体識別重要。)

つまり、複数引けないという制約は、
単なる関連から関連オブジェクトへと継承(?)されるべきではなかった、
と思うんですが、
UMLの中の人は、そう決めてしまったわけですね?

うわ、使えないなあUML。

となると、
UMLの下でモデリングする限りは、複数の関連オブジェクトを
同一ノード間には引けない、
引きたければ「UML以外の道具を使う(藁)」、ってなことになる
のだと思います。
うーん。UML以外の図法(太古には、Booch法とか、色々有ったと聞き及んでます)
を編集できるツールが欲しいですねえ(^^;


私は、「guionさん」が仰ってる事を表現する為に、「UML」の「関連クラス」は存在すると思います。
ただ、現在の「UML」では、最初に説明した様に、
「関連」以外の属性等を含めると、それは「関連クラス」とは呼ばない
というだけの話だと思います。
#名称としては否定されますが、存在が否定される訳では無いのでは?
guion
常連さん
会議室デビュー日: 2004/12/24
投稿数: 30
投稿日時: 2004-12-27 02:07
引用:

objectさんの書き込み (2004-12-26 12:17) より:
関連に「関する情報」を保持する
#「狭義」の関連クラス
#つまり、関連以外の情報を含んではいけない。
があると思います。



あ。面白い解釈だと思います。

が、そうだとすると、今度は、
「1本の関連線(リンク)」に対して「複数の(関連を説明する)オブジェクト」を
ぶらさげたいなぁ、という欲求が(少なくとも私には)沸いてくるんですが、
UMLだとそれも出来ない…ですよね?(^^;

#T字型のリンクが作れて、しかも1つの線分に複数の枝がぶらさがれる、みたいな感じの形。

引用:

ここで、問題なのは、
「関連クラス」という言葉に対して
殆どの人が
「広義」の意味に理解する
という事実だと思います。



人にとってそれが自然なのだと思います。
この自然に逆らうことを正当化できる理由は、特に存在しない、と
私は予想しています。
「直感に反するけど実は論理的に云々」なんてのも、この件については、無いんじゃないかと。

引用:

狭義の「関連クラス」=「純関連クラス」
等の命名が良かったんでしょうね。



大筋では同意しますが、細かい所を考えると
ソレでもまだダメだろうと読んでいます。

というのは、ほんとに「1ペアのノードの間には線が1つしか引けない」というルールにしてしまうと、
「互いにクラスが違う関連」すら1ペアの間には共存できないことになり、
そのせいで不幸なことに、「純関連クラス」を幾つ作ろうとも、やっぱり線は1つしか引けない
ということが起きてしまう。

例えば、「学校では担任と生徒、家では親と子」という関係の二人を、
(純)関連クラスでは、表現できないってことになるわけです。

となると、妙なことになります。
というのは、純関連クラスは、クラスであるくせに、関連を説明できないんです。
関連のリンク自体は、どんなクラスにも染めることが許されなくなっちゃう。
リンクはあくまで無修飾のリンクで有り続けなければならない。

つまり、純関連クラス(クラス自体も、そのインスタンスも)は、現実には出番が一度も無いんです。

これではその概念が存在する意義が無い。
というか、元のままの「無名のリンク」が存在すればそれで充分なんです。

引用:

#広義の「関連クラス」に「明確な名前」を付与する事は重要



同意します。

で、かつ、名前を与えるのと同じくらいに、UML上での絵のカタチも、与えて欲しいです。
その概念に対してUMLが語彙(UMLでの語彙とは、絵柄のことだと思います)を与えないってのは、
ちょっと不味いんじゃないかと。

#で、純関連クラスのほうは、上記のように出番が皆無なので、誰も使わない(^^;

引用:

>#名称としては否定されますが、存在が否定される訳では無いのでは?



語彙(絵柄など)が無いため、他の概念(普通のクラスを使うとか)で
代用して表現せざるを得ない状況です。

実装言語なら小手先の「代用」で逃げるのも有りでしょうけど、
モデル言語で、そりゃないだろ?と思っています。

HowじゃなくWhatを記述する言語は、
「充分な」語彙※を持っていないと不味い、と思います。
そういう言語においては、存在させられてない概念は、使えないんです。

消極的に否定されているようなもの、だと思います。

[※]あるいは語彙をユーザが自作する能力か、の何れかが必要だと思います。
つまり、概念と絵をユーザがバリバリ追加定義できて、
しかも一般的に実用的なUMLツール(^^;がその追加を受け入れられるように
なっているならば、私に不満はありません。

---
#ところでこのサイトで、自分がこれまで書いたものを探そうと思ったら、
#どうすればよろしいんでしょうか?(^^;
#まだ数個しか書いてないんですが、既に見つけられなくなってる私。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2004-12-27 09:46
引用:

guionさんの書き込み (2004-12-27 02:07) より:

#ところでこのサイトで、自分がこれまで書いたものを探そうと思ったら、
#どうすればよろしいんでしょうか?(^^;
#まだ数個しか書いてないんですが、既に見つけられなくなってる私。

「検索」で"guion"を検索すれば見つかります。
#自分以外の書いたものもマッチするけど。
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-12-27 09:57
遅ばせながら参戦です。
私も記事の内容は不可解でした。その不可解な点はguionさんが問題提示された、
引用:

guionさんの書き込み (2004-12-25 11:04) より:
引用:

関連クラスのインスタンスは両端のオブジェクトなしには存在できないオブジェクトである <=[1]
と、先ほどいいました。これはいい換えると、
関連クラスのインスタンスは両端の参加クラスのインスタンスが特定されれば一意に定まる <=[2]
、ということを意味します。


元記事はこうなっていますが、私が思うに、1から2は導けないんじゃないでしょうか?
そして結果として、関連インスタンスは一意に定まらないのではないでしょうか?


これであり、関連クラスの存在が問題ではなく[2]の意見が問題だと考えます。

記事ではその後、正しい例として「販売」-「明細」-「商品」を上げられていますが、
「返品」は如何様に扱われるのでしょうか?この問に対して想定出来る回答として
「この関係図に置いて、返品は取扱い対象外」という返答になります。

そうすると「関連クラスを用いる場合、関連クラスが存在可能な様に関連図が
表現しようとするモデル対象範囲に制限を課す」という条件が付きますが、

この条件は、モデル対象範囲の適切性を判断する手段として利用出来ますが、
絶対的制約まで推し進めるのは、図式表現技法としてのUMLの使い勝手を
悪くする事になります。

意見自体が想定ばかりで話を進めている事に問題はありますが、
今の所、上記の考えからguionさんが問題提示されている[2]が、私の争点です。



引用:

guionさんの書き込み (2004-12-27 02:07) より:
#ところでこのサイトで、自分がこれまで書いたものを探そうと思ったら、
#どうすればよろしいんでしょうか?(^^;
#まだ数個しか書いてないんですが、既に見つけられなくなってる私。


一つ一つの投稿文書の下段枠に「プロファイル」というアイコンがありますよね。
その先に[このメンバーからの投稿を表示]というのがあります。そいつです。

ただ、そこで表示される一覧のリンクはスレッドの先頭ですので、
投稿文書自体を見る場合、一覧で表示されている日時を覚えて置く必要があります。

_________________
人生変わっちゃうかもよ?OFF会参加者募集中今考えるな、参加してから考えろ。
skulker
ベテラン
会議室デビュー日: 2004/06/08
投稿数: 67
投稿日時: 2004-12-27 10:46
引用:

guionさんの書き込み (2004-12-27 02:07) より:
[※]あるいは語彙をユーザが自作する能力か、の何れかが必要だと思います。
つまり、概念と絵をユーザがバリバリ追加定義できて、
しかも一般的に実用的なUMLツール(^^;がその追加を受け入れられるように
なっているならば、私に不満はありません。


スケッチレベルならステレオタイプ(Fowlerの<<history>>とか)で充分でしょうし、バリバリ拡張したいならMOFを使えばよいのでは。

スキルアップ/キャリアアップ(JOB@IT)