オブジェクト図からのクラス抽出方法
ユースケース記述やユーザなどへのヒアリング結果から直接クラス図を記述する方法を見てきましたが、一度オブジェクト図を記述してからクラス図にまとめる方法もあります。オブジェクト図は、クラスのインスタンス(実例)であるオブジェクトの具体例を明確にし、概念構造を確認するためなどに使われます。
図3はオブジェクト図の例です。オブジェクト図には「インスタンス指定(インスタンス仕様)」と「リンク」と呼ばれる2つの要素しか登場しません。「インスタンス指定」の中には「スロット」が記述されます。
インスタンス指定とは、クラスのインスタンスであるオブジェクトの具体例を表します。四角形で記述され、見分けるために付けられる名前のアンダーラインは、インスタンスレベルであることを示しています。名前のコロン以降は、クラス名を記述します。クラス名さえわかれば内容を理解できるので、特に理由がなければ、コロンよりも前のインスタンス指定名は省略してもかまいません。さらに、これから抽出するクラスが明確になっていない段階では、クラス名さえも省略し、アンダーラインが引かれたコロンのみで表すこともできます。
インスタンス指定の四角形の中には、スロットと呼ばれる行によって、型であるクラスの属性の具体的な値が書かれます。書式は「属性名=値」です。
リンクとは、インスタンス指定の間に結ばれる実線のことです。インスタンス指定がクラスのインスタンスを表しているのと同じように、リンクはクラス間に存在する関連のインスタンスを表しています。リンクの端にクラス図の関連端名にあたる名前を付けることができます。
それでは、もう1度図3を見てください。これまでに出てきた出張申請システムに関するオブジェクトの例が記されているのがわかります。オブジェクト図は簡単なので、なんとなく何が書かれているかはわかると思います。真ん中の「出張申請」クラスのインスタンスを表すr1の左側には、申請者としての「社員」クラスのインスタンス(e1)と、承認者としての「社員」クラスのインスタンス(e2)がリンクでつながっています。また、各インスタンス指定のスロットには属性の具体例を表す値が書かれています。
ここでは、1つの「出張申請」クラスのインスタンスに着目しましたが、複数の具体例をリンクでつなげてみると、クラス図に記述する関連の多重度を確かめることに役立ちます。
(画像をクリックすると別ウィンドウに拡大図を表示します)
まとめ
今回は、13あるUMLの図の中で最も使用頻度が高い図であるクラス図と、クラス図を導き出すための、またクラス図の内容を確かめるためのオブジェクト図を見てきました。
今回のクラス図は、あくまでも静的な構造をモデリングしたものです。「オブジェクトとは、情報(静的構造)と処理(振る舞い)を1つにカプセル化したもの」と言われることがありますが、次回に登場する「シーケンス図とステートマシン図」によって振る舞いをモデリングすることによって、はじめてUMLによるオブジェクト指向モデリングが成立すると言えるかもしれません。この振る舞いモデリングの結果は、後からクラス図に「操作」などとして反映されます。
また、クラス設計の良し悪しを判断する力は経験によって身につくところが大きく、モデリングのもっとも難しい部分と言っても過言ではありません。しかし、モデリング経験があまりない場合でも、要求分析から振る舞い設計までを何回か繰り返し行ったり(イテレーション)、クラス図と並行的にシーケンス図やステートマシン図を記述したりすることによって、クラス設計をより洗練させていくことが可能です。 タイトルへ戻る