#topicpath ---- UMLのクラス図を、実際にソースコードに落としたときのスケルトンでまとめてみました。 #contents ***単純な関連 [#u16096b8] まずは単純な関連です。誘導可能性がないため、どちらにも参照をもつ((フィールドにもつってこと))形になってしまいますね。あんまりよろしくないでしょう。 #ref(01.png) public class Directory { private File child; } public class File { private Directory parent; } ***誘導可能性を追加した関連 [#t7d7f0c3] 誘導可能性を追加すると、片方にしか参照をもたなくなります。一般的な関連といえますね。 #ref(02.png) public class Directory { private File child; } public class File { } ***継承関係 [#q42be0bf] 継承はこんな感じ。 #ref(03.png) public class Directory { private File child; } public class File extends Directory { } ***集約の関係 [#j2187477] 集約(Aggregate)にしてみました。ここでは配列ですが、Listでもよいですね。 #ref(04.png) public class Directory { private File[] child; } public class File extends Directory { } ***インターフェースの関係((ちなみにCompositeパタンですね)) [#e272dc9e] インターフェースの実現の関係です。 #ref(05.png) public interface Entry { } public class Directory implements Entry { private Entry[] entry; } public class File implements Entry { } ***依存関係 [#l3423afe] 依存はフィールドに持たないような関連性の低い関連(?)((メソッドの引数・返り値とか、メソッド内でクリエイトされるとか))を表すときに用います。 #ref(06.png) 関連性の低い関連、を説明しているサイトがありました -[[Martin Fowler's Bliki in Japanese - 依存と関連:http://bliki-ja.github.io/DependencyAndAssociation/]] ここを引用すると、 >パラメータの型を命名したり一時変数内にオブジェクトを作ったりすることは、「依存」を意味する。 んだそうです。だいたい上の説明であってるみたい。 **細かい話 [#kd958a9c] ***関連クラスのはなし((この記述は[[【改訂版】初歩のUML 第4回:http://www.atmarkit.co.jp/fjava/devs/renew_uml04/renew_uml04.html]]を参考にさせて頂きました。頭の中の整理っつう事でメモ書きとして記してます。)) [#a8badd51] 複数の会社に属する人がいるってのを表すと、始めこうモデル化されると思いました。 #ref(クラス図.png) オブジェクト図で表すと下図のようになりますが、 #ref(オブジェクト図.png) よく考えると社員は複数の会社の社員番号((a社とb社の社員番号))をもてないって事になります。 いろいろ考えるとモデリングが悪いって事で、改善した結果がこれ。 #ref(改善したクラス図.png) オブジェクト図を書いてみて、正しく表現できそうですね。 #ref(改善したオブジェクト図.png) この社員情報クラスのように、二つのインスタンス間の関連に付属する属性のクラスのことを関連クラスというそうです。UMLで記述する場合 #ref(関連クラス.png) と書きます。 ***限定子の使い方 [#tfc327f2] クラス間で、どの属性を用いて相手のインスタンスを特定するかを表すために限定子という記号を用います。たとえば、次のモデルの場合 #ref(07.png) 会社から見た場合、組織は組織コードによってユニークになります。それを表すとき #ref(08.png) と書きます。この組織コードという一つの四角のことを限定子と呼びます。限定子によって組織クラスはユニークとなるため、関連の多重度が1になっているところがポイントです。 ---- この記事は #vote(おもしろかった[366],そうでもない[78]) #comment #topicpath SIZE(10){現在のアクセス:&counter;}