概要
特にUMLの読み方とか制約についての説明はしていません。
制約の有無により、解釈を制限できるというお話です。
本題
次のクラス図があったとします。
よくある再帰的な関連を持つクラスを表現したクラス図です。
さて、上のクラス図からオブジェクト図を作るとしたら次のようになるでしょうか。
山田さんは、佐藤さんと田中さんの上司であることを表現したオブジェクト図ですね。
クラス図の多重度にも違反していないので、正しく表現できているように思えます。
本当にこのパターンだけでしょうか。。?
次のオブジェクト図を見てみましょう。
山田さんは佐藤さんの上司です。
佐藤さんは田中さんの上司です。
田中さんは山田さんの上司です。(?)
クラス図の多重度にも違反していないので、正しく表現てきている。。感じがしませんね。
実は最初に提示したクラス図だと、こういったケースも考えることができてしまいます。
そう、上司と部下の関係がループしています。
再帰関連を使ったクラスの表現はループになりますので間違ってはいないのですが、違和感があります。
それは、一般的に会社の組織において、上司と部下という役割は本来ループするような関係では無いためです。
(上司の部下の上司からは部下として仕事してます。というのはあまり聞きせんね。)
こういった時は、次のように制約を定義することで、解釈に制限を設けることができます。
上のように階層制約が定義されたクラス図の方が、オブジェクト図も作りやすいかもしれませんね。
以上です。