賢くなりたい~賢くなりたくない~♪

見たもの聞いたもの何でも発信!!

【UML】 クラス図における「関連」と「依存」の違い【開発・ドキュメント】

中年・弱小開発者の私にも,ついにUMLを書く機会が来てしまいました.

極力避けていたのに・・・(笑)

 

「モジュール間の依存関係を図示せよ」

というミッションを上司からいただいたので,

まずクラス図を書いてみようかなと思い,

本とネットを使って調べました.

ゼロからわかる UML超入門

ゼロからわかる UML超入門

 

 

本記事では、この本から学んだこと+アルファ、

特に表題にあるように『「関連」と「依存」の違い』について

書いていきたいと思います。

 

 

クラス図の「関連」と「依存」の書き方

クラス図の中で

  • 「関連」は線「ー」,
  • 「依存」は矢印(→)

で書きます.

依存の矢印に関しては依存元から依存先へ矢印を伸ばします.

 

クラス図における「関連」と「依存」の違いって何?

調べていて疑問をもったのは

「関連」と「依存」の違いって何?

ってこと.

 

この二つについて,あるサイトでは以下のように書かれていました

 

  • 関連:コラボレーションする相手のクラス(オブジェクト)をいつでも参照できる関係
  • 依存:依存先オブジェクトの変更が,依存元オブジェクトに影響を与える可能性のある関係

 

www.ogis-ri.co.jp

 

う~ん。。これだと両方を満たす「関連,且つ,依存」の関係ができますよね

 

それでもいいってことか?

変更が依存・関連元に絶対影響を及ぼさないと保証できることってあるのかな?

(それって開発者次第な気がする).

 

関連の記述にある「いつでも参照できる」っていうのがちょっと臭いが,これじゃあちょっと納得いかないな。。

 

ということで,他のサイトも検索してみると,以下のような記述がありました.

  • 関連:メンバ変数に(オブジェクトを)持つ
  • 依存:一時オブジェクトとしてnewする関係

 

(関連と依存を使い分けるという観点では)こっちのほうがしっくりきますね.

 

依存先のオブジェクトをメンバ変数として持つのか,メソッドでnewするのか,ってことですからね.

 

諸説ありそうですが,自分の中の結論としては,

後者の

依存先のオブジェクトをメンバ変数として持つのか(関連),メソッドでnewするのか(依存)で使い分ける

ということにしました

 

 

【スポンサーサイト】

 

いろいろな説がありそう

なんだか調べれば調べるほどいろんな記述があるので,とりあえず明確に分けることは難しいんだということはわかりました.

 

本によっては「依存しか出てこない」

例えば以下の本では「依存」しか出てきません.要はそれでいいってことなんでしょうかね.

オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)

オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)

 

※文章中に「関連」という言葉は出てきますが,それはクラス図の中で使う関連(ー)ではありません.

 

 まとめ

上に書いたように,私の結論は

依存先のオブジェクトをメンバ変数として持つのか(関連),メソッドでnewするのか(依存)で使い分けるです.

ただ,諸説ありそうなので,各自,一番しっくり来るものを探すのが良いかと思います.