TOPシステム開発【伝わる!モデリング】はじめようUML!> 第3回:クラス図とオブジェクト図を学ぼう! (2/3)

【伝わる!モデリング】はじめようUML!

【伝わる!モデリング】はじめようUML!

第3回:クラス図とオブジェクト図を学ぼう!

著者:株式会社テクノロジックアート 山下 智也

公開日:2008/04/15(火)

情報源からのクラスを抽出する

ここでは、ユースケース記述などのユースケースの操作手順から、クラス図を作成する方法を見ていきます。前回の要求分析の結果から「出張申請を登録する」ユースケースの操作手順を見てみましょう。

「出張申請を登録する」ユースケースでは、最初に(アクターである)申請者が、メニュー画面から「出張申請の登録」を選択するなどして、出張申請情報の登録操作を開始します。するとシステムは「出張申請入力画面」を表示します。

表示された「出張申請入力画面」に、申請者が出張申請(行き先、目的、期間)を、「出張申請入力画面」に交通機関名を入力するといった流れで操作を進めていきます。

クラス図の作成は、操作手順からの名詞をもとに作成します。このときの名詞は画面や操作方法に関するものは除いて、直接的に業務に関する概念を抽出していきます。このようにして得られたクラス図は、システムとは独立した純粋な業務のデータ構造が表現されます。先ほどの図1はこうして作成したクラス図の例です。ユースケース記述からの名詞は、クラス図ではクラス、属性、関連端名のいずれかになります。

クラスを抽出する方法は、名詞から抽出する方法だけではありません。オブジェクトの振る舞いを設計する中で抽出する方法や、名前がすぐに思いつかない概念から発見される場合もあります。後述するオブジェクト図から抽出する方法もその1つです。

図2:具体的なクラス図の例
(画像をクリックすると別ウィンドウに拡大図を表示します)

より具体的なクラス図

図2は、図1のクラス図に追加の変更を加え、対象のシステムを開発する目的で詳細化したものです。新しく登場したものは操作、可視性、誘導可能性、コンポジションです。

操作はオブジェクトの振る舞いです。例では、「単価を更新する()」という操作が追加されています。「出張手当」クラスの「金額」属性の値は、「単価×宿泊数」という計算によって求められるとします。「単価」属性の値は、外部のクラスから与えられるものではなく、「出張手当」クラスのオブジェクトが、自ら外部のオブジェクトから値を取得し更新する仕様であると仮定します。この場合、「単価を更新する()」が外部のクラスから呼び出されると、単価更新の処理が行われるといった具合です。

可視性は、属性や操作、関連などの特性に対して指定することができ、その公開範囲を表します。公開範囲は、どのクラスからでも自由にアクセスできる「public (+)」や、自クラスからのみアクセスできる「private (-)」、自クラスおよびサブクラスからアクセスできる「protected (#)」、同じパッケージ内のクラスからアクセスできる「package (~)」の4種類があります。

例では、画面などから値が設定されるため、ほとんどの属性を「public (+)」としています。プログラミング言語に落とし込む際に、属性の可視性を「private (-)」にし、属性にアクセスするための操作(アクセサ)を「public (+)」として設けることを想定しています。前述の通り、外部のクラスからアクセスされたくない「出張手当」クラスの「単価」属性は「private (-)」にしてあります。

誘導可能性は、関連端につけられる矢印や×印のことです。矢印の方向のオブジェクトは導けますが、×印の方向のオブジェクトは導けないことを示します。

コンポジションは、集約よりも強い結びつきがあることを示す関連の一種で、黒塗りのひし形で記述します。部分側のオブジェクトが、全体側のオブジェクトと同時に消滅することや、部分側のオブジェクトが同時に複数のオブジェクトから集約されないことなどを表します。 次のページ




株式会社テクノロジックアート  山下 智也
著者プロフィール
株式会社テクノロジックアート 山下 智也
2002年 株式会社テクノロジックアートに入社。Webアプリケーションおよびフレームワーク開発やアジャイル開発を経験し、現在は各種のパターンに関するトレーニング講師も務める。人間的にも技術的にも立派なアーキテクトを目指して日々の精進を心がけている。著書に『独習デザインパターン』(共著/翔泳社)、『Eclipse3 + UML2.0による実践ソフトウェア開発』(監修/秀和システム)がある。
http://www.tech-arts.co.jp/


INDEX
第3回:クラス図とオブジェクト図を学ぼう!
  クラス図とオブジェクト図
情報源からのクラスを抽出する
  オブジェクト図からのクラス抽出方法