スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[UML]クラス図の関連はメンバ変数?

UMLを書いていていつも考えてしまうこと

関連って実装でいうとメンバ変数なのかしら?
集約とコンポジションてどう違うのかしら?

正直、実装者と設計者の間で同意がとれていれば問題ないことなのでしょうが
チーム外、顧客への説明などで認識に差が出やすいです。

異論もありましょうが私の中では、 関連=メンバ変数 としてしまいました。
この人はこれを持っている(包含している)の?
とか関連線をなぞりつつ言われたら、「そうです」と答えています。
ただ、UMTPの勉強をしていると、ここに違和感が生じるんです。。。

そうなると誘導可能性を除いてしまうと、どっちがどっちを持っているかわからなくなるので省略できません。
引数で渡ってくるものは依存にしています。これは設計上明示したいモノ以外はかきません。

これに集約・コンポジションまで入ってくると、その違いを考え初めてキリがないので、集約=関連として、コンポジションに関してのみ複数クラスで同時に共有が可能か、という観点から明記するという運用にしています。

共有可能=集約(関連) ※◇- は記載しない
共有不可=コンポジション。

GUIのコンポーネントなどはコンポジションであるべきなのでしょう。

これについては、OMGのドキュメントを読んだ結果、もういいやってことでこうなりました。

The Current Official UML Specification

Compositeの記述を抜粋すると、
--------------
An association may represent a composite aggregation. Only binary associations can be aggregations. Composite aggregation is a strong form of aggregation that requires a part instance be included in at most one composite at a time. If a composite is deleted, all of its parts are normally deleted with it. Note that a part can (where allowed) be removed from a composite before the composite is deleted, and thus not be deleted as part of the composite.

<がんばって訳しました。間違ってたらスミマセン。。。
関連はコンポジット集約で表現できるかもしれません。
単なるバイナリの関連は集約になります。
コンポジット集約は、一時(ひととき)に高々一つ(一つ以下)の全体が必要とする部分インスタンスという、集約の強力な形式(表現)です。
全体が破棄されたら、すべての部分は通常同時に破棄されます。
全体が破棄される前に、部分を破棄できること(許されている場合)に注意してください、
それはその結果、全体の一部と同様には破棄されません。
-----------------------

一時に一つの全体が必要とする部分であり、全体が破棄されると通常破棄される集約

がコンポジションであり、つまり、よく言われるライフサイクルの一致については緩い規定(全体破棄で同時に破棄されるかも、全体破棄の前に破棄されるかも)があるだけのようです。
ということで、私は明確に定義されている一時に一つの全体の部分という点にのみ着目することにしました。同時間に複数クラス間で共有は出来ないということですね。

でも、ライフサイクルってGCありきで考えると、ますます曖昧なものになってきませんか?
スポンサーサイト

theme : ソフトウェア開発
genre : コンピュータ

comment

管理者にだけ表示を許可する

自己紹介

煩悩即菩提

Name:煩悩即菩提


三流SEです。
開発は基本Javaです。
Androidアプリ作り隊。。

お絵かきを少々しとります。
こちらもぱっととしないのが悩みです。

bonnosokubodaiをフォローしてください

Pixivアカウント

カレンダー   
Recomend


ビデオニュース・ドットコム
検索フォーム
最新記事
最新コメント
月別アーカイブ
カテゴリ
最新トラックバック
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。