第2回「Eclipseをモデリングツールに活用しよう」ではEclipseUMLプラグインの紹介とインストールを行いました。
今回は、「書籍管理システム」の機能を順次実装していくことを想定し、UMLをEclipse上で作図してみましょう。説明は設計工程の流れに沿いながら行います。前回も触れましたが、Web系のシステムでは、ユースケース図、クラス図、シーケンス図がよく利用されます。ですので、これらについては詳しく見ていきますが、それ以外については本稿では簡単な紹介にとどめます。
扱う図 | ユースケース図 |
---|---|
記述可能アイテム | アクター、ユースケース、システム |
関連、汎化、包含、拡張 | |
この図は複雑な表記があまり必要ありませんので、題材が決まっていればすぐに作成できます。要件定義が終わった段階で、オペレータがシステムにログインして検索処理を行うような場合は、次の構成で図を描くことになります。
(1) 「Create an actor」で「オペレータ」を作成
(2) 「Create a system」で「書籍管理システム」を作成
(3) 「Create a use case」で「検索する」を作成し、(2)で作ったシステムの中にユースケースを移動(この時点でユースケースとシステムは同一グループになり、一緒に動かせるようになります)
(4) 「Add an association」で「オペレータ」と「ユースケース」を関連付け
(5) 「Note」、「Indication」で適宜説明を付加
扱う図 | クラス図 |
---|---|
記述可能アイテム | クラス、インターフェイス、パッケージ |
関連(プロパティ…「集約」「コンポジション」「ロール名」「多重度」) | |
依存関係 | |
汎化 | |
UMLを用いて設計する場合に基礎となる図です。この図を随時修正していくことで、より詳細なクラス図を作成していくことになります。書籍の検索処理と併せて検索履歴も保存しようとした場合、例えばクラスの基になるものとして、「Book」「BookList」「Keyword」「KeywordHistory」の4つを考えることができます。
(1) 「Create a class」で上記4つのクラスを作成
(2) 「Association」で各クラス間を関連付け
関連付けは、オリジナルのクラスをクリックしてから、ターゲットとなるクラスをクリックし、それぞれのクラスの側で、各種プロパティを入力します。その際には、例えば集約であれば、構成する要素側のプロパティの「Association Type」を「Aggregation」に指定します。また、関連付けの際に自動で作成されるメソッド類については、必要に応じて残したり消したりしてください。そもそも、アクセサメソッドが必要ない場合は、「use accessor」のチェックを外します。
なお、一連の作業は、パッケージやインターフェイスについてもほぼ同様となります。
UMLで一般的に使われる「+」「-」「#」に変更したいときは、「ウィンドウ」→「設定」→「UML」→「Appearance」タブにある「presentation style」を、デフォルトの「Eclipse」から「UML Standard」に変更します。一方、クラスの表示方法自体も、右クリックで選択できます。「Maximize」「Minimize」をはじめとする表示方法の変更が可能で、「View Selector」を選択すると、属性やメソッド単位で、表示する/しないを変更することもできます。図の用途に応じて変更するとよいでしょう。
さて、概念モデルの話はここまでですので、この図はいったん保存して作成をやめ、次の作業に移ります。
扱う図 | シーケンス図 |
---|---|
記述可能アイテム | アクター、オブジェクト |
メッセージ(プロパティ…「生成」「消滅」「条件」「同期(非同期)」「リターンの有無」) | |
再帰 | |
先ほどの概念モデルにあるクラスの元を利用して処理の流れを記述します。実際に具体的な検索処理の流れを考慮して、以下のような順で図を作成します。
(1) 「Create an actor」で「オペレータ」を作成
(2) 「Add a new object」で「検索処理画面」「検索管理」を作成(type:Object)
(3) 「Add a new object」で概念モデルで作成した4つのクラスそれぞれの型を指定しオブジェクトを作成
(4) 「Add a message」でそれぞれのオブジェクト間にメッセージを追加
オブジェクト作成時のプロパティを入力するときに、クラスの型を指定しなくてはなりません(画面3)。このとき、放っておくと何も表示されませんが、1文字でも入力すると、その文字で始まる選択可能なクラスが表示されます。文字を入力するたびに、表示されるものが絞られていきます。
メッセージの追加のとき、まずは「ラベル」を記述します。伝達先に、すでに作成してあるクラスを指定した場合は、Operationの欄に当該クラスに作成済みのメソッドが並びますので、それを選択します。
シーケンス図そのものは、別に作成することもできますが、その際は、作成したシーケンス図の名前を適宜変更すると、この操作と連携できるようになります。同様に、クラスを右クリックして「Create/Open state diagram」を選択することで、そのクラスに関するステート図を作成する(開く)こともできます。
扱う図 | クラス図 |
---|---|
先ほど記述した概念レベルのクラス図をより詳細に記述します。
(1) 新たなクラスの追加、プロパティの編集
(2) メソッド、属性の追加
(3) 関連の追加
記述方法は「[基本設計]概念モデルを抽出して記述する」とほぼ重なりますので、詳細は割愛します。以下のポイントも参考にしてください。
基本的には、このような形で設計を進めて、クラス図、シーケンス図を整理していきます。ここから先は実装の話とも関連します。
扱う図 | クラス図 |
---|---|
パッケージ図を記述する場合はクラス図を作成することになりますが、既存のどのクラスを扱うかを決定する必要があります。ここでは、作成したすべてのクラス(6つ)を使うことにしています。先のクラス図に、新たに以下の操作を行います。
(1) 「Create a package」で「bookdata.view」「bookdata.control」「bookdata.book」「bookdata.keyword」パッケージを作成
(2) クラスの右クリック→「View Selector」でメソッドを非表示化して、おのおのをパッケージ内に移動
(3) パッケージ・エクスプローラ間でのファイル移動
(4) パッケージ間の関連付け
(2)まで実行すると(画面6)のようになります。ここで保存してもクラス図のみの情報になりますので、次に、パッケージ・エクスプローラ上で、既存の「….java」を当該パッケージ内にドラッグ&ドロップすることで、構成の情報がクラス図やソースにも反映されます。
今回の流れでは、クラスを作成していきながら、パッケージにまとめられそうなものを抽出、分類しています。コンポーネント構成を決めてから細かいクラス設計を行うのであれば、先にパッケージ図を作成する場合もあるでしょう。その場合クラス図には、エディタから右クリックで「Insert」→「Package」を実行してください。
扱う図 | コンポーネント図、配置図 |
---|---|
記述可能アイテム | コンポーネント |
インターフェイス、人工物 | |
汎化、依存、実体化 | |
ノード | |
関連付け | |
ある程度条件が決まっている場合は、描かずに済まされることもありますが、このような図を描くことも可能です。一部、コンポーネントが正しく表示されないのはバグと思われます。
さて、大まかですが、工程に沿って使われるそれぞれの図についての説明をしてきました。これ以降の図については、位置付けも兼ねて紹介程度に説明します。
記述可能アイテム | アクター |
---|---|
オブジェクト(プロパティ…「ロール」「タイプ」「アクティブ」「マルチプル」) | |
メッセージ(プロパティ…「引数」「返却値」「シーケンス番号」「同期(非同期)」「先行子」「繰り返し」) | |
相互作用図の1つです。基本的にシーケンス図と同じ情報を違う観点から表します。
仕様レベルコラボレーション図、および、ロールを入れたインスタンスレベルのコラボレーション図を作成できます。特に欄はありませんが、「並行処理」については、「シーケンス番号」にまとめて記述できます。
記述可能アイテム | インスタンス(プロパティ…「属性」「アクティブ」「多重度」) |
---|---|
関連(プロパティ…「集約」「コンポジション」) | |
フロー | |
コラボレーション図からメッセージをなくした図になります。コラボレーション図がシステムの動的な側面を表すのに対し、このオブジェクト図は静的な側面を表します。
記述可能アイテム | ステート |
---|---|
履歴(プロパティ…「浅い」「深い」) | |
開始状態、終了状態(プロパティ…「イベント名」)) | |
遷移(自己遷移)(プロパティ…「イベント名」「引数」「ガード条件」「アクション」)) | |
例では、自動販売機の内部状態を示していますが、このように状態遷移するものを整理するときに利用します。主に、組み込み系アプリケーションを作成する際に記述されます。
完了遷移(矢印だけ)を記述するときは、ダイアログに何も入力せずに「OK」をクリックします。また、コンポジット状態は、複数のステートを1つのステートで囲んで記述します。
記述可能アイテム | アクティビティ、オブジェクト |
---|---|
開始状態、終了状態、デシジョン、マージ | |
フォーク/ジョイン(プロパティ…「線の向き」) | |
レーン(partition)、シグナル | |
遷移(プロパティ…「引数」「ガード条件」「アクション」) | |
オブジェクトフロー | |
ステートチャート図と似ていますが、こちらの図はワークフローを確認できます。そのため、Webアプリケーションを作成する際には、こちらを利用する場合が多いです。Toolbarに並ぶアイテムがステートチャート図と重複していますので、混同しないようにしてください。各アクティビティは、レーンを作成、指定し、その中に記述します。
商用製品と比較した場合に、若干の力不足を感じますが、フリーでこれだけの図が描けるプラグインが存在していることが、Eclipseの大きな魅力です。開発チームのブレーンストーミング用資料として、これを使って手早く図を描き、随時修正していく、といった用途には十分利用できるでしょう。操作も難しくはなく、習うより慣れろで書けるツールであると思います。
このプラグインについて日本語で情報交換されているWeb「Eclipse Wiki(http://w3.cube-web.net/eclipse/)」もありますので、適宜参照するといいでしょう。
さらなる可能性を秘めたこのプラグイン、適材適所で使ってコスト削減につなげることができると思いますので、皆さんもどんどん試してみてください。
すでに、EMFやGMFのプラグインを利用している場合に、このEclipseUMLプラグインをインストールして使っていると、ファイルが作成されなかったり、ウィザードが次に進まなかったり、「おや?」と思うことがあるかもしれません。その状況は、EclipseUMLプラグインで利用しているEMF、GMFとの整合性が取れていない可能性があります。そのような場合は、EclipseUMLプラグインをいったんアンインストールし、再度インストールすることで正しく動くようになります。アンインストールは、「C:\Program Files\eclipse\Uninstaller」配下に「uninstaller.jar」がありますので、コマンドプロンプトから「java -jar uninstaller.jar」を実行します。その後、インストールすれば動作するようになります。なお、各種の図で右クリックしたときに表示されるメニューのうち、「Zoom-In(Out)」については、動作確認されているGEFプラグインの、最新バージョン用機能となっていますのでご注意ください。
山口 卓也(やまぐち たくや)
現在、株式会社NTTデータ ビジネス開発事業本部に所属。社内技術支援業務に携わり、主に、J2EEをベースにしたWebシステムに関する障害対応やトラブルシュートから方式設計、オープンソース製品関連のサポートを担当している。
岡本 隆史(おかもと たかし)
NTTデータ 技術開発本部 所属。Debian GNU/Linuxの優れたメンテナンス性と他のディストリビューションを圧倒するパッケージ数に引かれDebianを使い始めたのをきっかけに、Debian プロジェクトの開発者となりJavaサポートの強化を行う。『Jakartaプロジェクト徹底攻略』(技術評論社)、『WEB+DB PRESS』(技術評論社)、『Java World』(IDGジャパン)、『JAVA Developer』(ソフトバンクパブリッシング)などで執筆活動を行っている。
Copyright © ITmedia, Inc. All Rights Reserved.