連載第7-2回
UMLの基礎と応用

(株)NTTデータ 技術開発本部 副本部長
山本修一郎

 多重度メニュで指定した値がクラス図で表示される。集約ボックスをチェックすると白い菱形で集約関連がクラス図で明示される。集約関連の親側のロールの詳細タブの保有指定で「値による」を選択すると、この集約関連はコンポジット関連となる。たとえば、図5に示す例では、出庫依頼画面クラスから商品クラスへの集約関連に対する関連仕様ウィンドウで商品を値により保有することをロールBの詳細タブで指定している。この操作を行ってOKボタンを押下すれば、クラス図では黒塗りの菱形で複合集約(ROSEではコンポジット)関連が明示される。集約関連をツールバーから選択すると、関連線の始点側のロール(つまりロールB)の詳細タブで集約ボックスがチェックされている。

図5 コンポジット関係の指定
図5 コンポジット関係の指定

 残念なことにF1キーを押してROSEのヘルプメニュでコンポジット関連を探してもコンポジット関連の指定の仕方は出ていないので注意しておこう。ROSEの次の改訂ではコンポジットに対する説明を追加してもらいたいものだ。

 さて関連の線の上にマウスをおいて右クリックするとポップアップメニュで関連に関する詳細を設定することもできる。図6に示したように簡単に多重度などを指定することができるので、こちらの方が便利なこともある。

図6 ポップアップメニュによる関係仕様の編集
図6 ポップアップメニュによる関係仕様の編集

 ところで一度つけたクラス間の関連に対して一方のクラスを、クラス図の中にある他のクラスに変更したいことがある。ROSEでは関連の付け直すときに、慎重なマウス操作が必要だ。関連を示す線をクリックして、関連線を選択する。このとき、線の両端が小さな黒い正方形で強調される。普通に考えると、この正方形にマウスを合わせて移動したくなるが、この正方形はノードの中心を示しているので、これにマウスを合わせて線だけを移動しようとすると、クラスも一緒についてきてしまうので注意しておく。どうすればいいかというと、この黒い正方形より、ちょっとだけ線の中心に向かった位置をマウスで指定して、そのままマウスを移動させるとよい。なれれば簡単だが、少し練習が必要だ。

クラスの属性や操作の追加

 クラスに対して属性や操作を追加するときは、クラスアイコンを選択して右クリックすると、ショートカットメニュが提示されるので、[新規属性の追加]や[新規操作の追加]を選択して、名前を挿入すればいい。図の上では属性の順番の入れ替えはできないので、クラス仕様の属性タブの上で入れ替えることになる。クラス仕様では属性の順序の入れ替えを編集できる。また、マウスを右クリックすると、エントリーが一つ追加される。属性タブでは属性が表形式で一覧表示されるので、クラス図で属性を追加するよりも、属性タブで属性を追加するほうがいいかもしれない。

 図7 に属性や操作を追加したクラス図の例を示す。この図からわかるようにROSEでは操作や属性の可視性の4つの種類(Public、Protected、Private、Implementation)に対応した小さなアイコンが名前の先頭についている。

図7 属性や操作を追加したクラス図の例
図7 属性や操作を追加したクラス図の例

クラス図を作成する上での留意事項

 シーケンス図を用いたクラス図の作成手順は次のようになるだろう。

(1)シーケンス図で抽出された境界オブジェクト、制御オブジェクト、実体オブジェクトをクラスとしてクラス図に挿入する。

(2)次いでシーケンス図のメッセージに基づいてクラス間の関連を追加する。また各クラスの静的な構造に基づいて集約関連やコンポジット関連、汎化関連にあるクラスを追加する。
 さらに、必要があれば依存関連や実現関連にあるクラスを追加する。

(3)関連のロール名や多重度などを追加する。

(4)クラス図の各クラスについて属性や操作を追加する。

(5)クラス図の妥当性を吟味して、必要があれば上記の手順を繰り返す。

 図7の例では、シーケンス図にないクラスとして注文主登録簿クラスと出庫商品細目クラス、商品クラスを追加した。

 注文主登録簿クラスを追加した理由は、システム内で注文主に関する情報を管理するためである。また注文主をシステムで管理するためにステレオタイプの種別をエンティティに変更してしまうと、ROSEでは、シーケンス図やユースケース図の注文主もエンティティ・ステレオタイプのアイコンに変わってしまうことも理由の一つである。

 商品クラスを追加した理由は、出庫依頼画面クラスや在庫クラスでは商品に関する情報を要素として持つためである。出庫商品細目クラスを追加した理由は次の2つである。

(1)個々の出庫依頼では、複数の商品に関する出庫を依頼すること

(2)商品クラスと出庫依頼画面クラスとを直接関連付けてしまうと、出庫依頼画面オブジェクトに依存する出庫量を商品クラスの属性として持つことになり、商品という「モノ」に関する情報を記述するクラスに、出庫依頼という「コト(出来事)」に関する記述を追加することになるからである。

 ラーマンの本[2]には、概念モデルと設計クラス図の2段階でクラス図を作成する具体的な説明があるので参考になる。この本でも、シーケンス図とコラボレーション図を用いて設計クラスを作成する手順が述べられている。ただし概念モデルに対するクラス図はユースケース図から作成するとしている。また属性や操作の具体的な抽出規則なども述べられている点も有用である。

 クラス図を作成する上で留意すべきことは、クラス図だけであまり考え込むのはやめてユースケースやシナリオ、シーケンス図やコラボレーション図との関係をよく整理していくことだと思われる。そうしないとせっかく作ったクラス図がシステム分析や設計の他の生産物で参照されないことになる。冗長な生産物を貴重な時間を使って作成していたのでは、生産性の低下を招きかねないだろう。実際のプロジェクトへのUMLの適用でよくあるのは、ユースケースやクラス図を初期の工程でどうやって記述すればいいかあれこれ検討して推敲を重ねるうちに時間切れになってしまい、ユースケース図やクラス図が中途半端なまま製造工程になだれ込んでしまうことだ。たとえば、読者のみなさんは次のようなクラス図をみたことがありませんか?

・一部は詳細に記述されているが、別の部分は詳細化されていない
・気になるものを全部描きこんであり、全体が複雑になっている
・目的が吟味されていないため、複数の目的を1枚の図で表現している
・関連の意味があいまいで、どう設計していいかわからない
・さまざまな関連が記述してあり、理解したり検証するのが困難である

 これではなんのためにUMLを用いているのかわからない。要は目的をはっきりさせ単純明快で他の図式とも矛盾のないクラス図を作成することである。

まとめ

 本稿ではROSEを用いてクラス図を実際に作成してみた。また、クラス図を作成する上での課題について述べた。クラス図についてはインタフェースや制約記述言語などについてまだ述べていないが、基本的な知識はとりあえずこれくらい知っておけば十分だと思われる。次回は状態図(Statechart Diagram)について説明しよう。

参考文献
[1] 日本ラショナルソフトウェア, http://www.rational.co.jp/
[2] ラーマン著今野,依田監訳, 実践UML パターンによるオブジェクト指向開発ガイド, ピアソン・エデュケーション(原著名 Applying UML and patterns an introduction to object-oriented design)1998

●執筆者にメールを出す
yamamotosui@nttdata.co.jp
連載第8回へ >>
・連載第1回

・連載第2回

・連載第3回

・連載第4回

・連載第5回

・連載第6回

・連載第7回

・連載第8回

・連載第9回

・連載第10回

・連載第11回

・連載第12回

・連載第13回

・連載第14回

・連載第15回

・連載第16回

・連載第17回