 |
使えるUML 第6回 |
2007.7.5 掲載
パターンの表現
今回は、前回話題にしたMVCパターンを利用した例を示すとともに、MVCパターンをはじめとしたアーキテクチャパターンや、GoFのパターンに代表されるデザインパターンなどのパターンをUMLでどのように表現すれば良いのかを見ていきたいと思います。
◇MVCパターンの例
前回は、次の表1のようにシステムの構造を分割するMVCパターンについて見てみました。
| No |
略語 |
正式名称 |
日本語訳 |
説 明 |
| 1 |
M |
Model |
モデル |
データやビジネスロジック |
| 2 |
V |
View |
ビュー |
ユーザインタフェース |
| 3 |
C |
Controller |
コントローラ |
モデルとビューの仲介役 |
表1 MVCの内容
今回はMVCパターンの例として、次のような小さなアプリケーションを考えてみます。
・「時計」をソフトウェア上で実現する。
・「アナログ表示」と「デジタル表示」を切り替える。
・内部的な時刻情報が更新されたタイミングで、表示も更新する。
|
最初に、簡単なユースケースを定義してみました。
図1 時計アプリケーションのユースケース
世の中に既に存在する時計アプリケーションには、日付を確認できるものや、世界中の時刻を表示できるもの、各種設定を行えるものなど、さまざまなものがありますが、ここでは最も簡単で最も主要なユースケースである「時刻を確認する」に注目しています。
次に、「時刻を確認する」ユースケースに関係する初期の概念クラス図として、今回は次の図2のようなモデルを考えました。「時間」は、「時(hour)」と「分(minute)」と「秒(second)」に分けられます。時、分、秒は、感覚的に似ていると感じられるので、ここでは抽象的な「時刻要素」に汎化しています。ユースケースの定義によって、「時刻を確認する」こと以外は範囲外としているので、「年月日」や「国」などの概念は登場しません。
図2 時計アプリケーションの概念クラス図
MVCパターンを採用した際の最も大きな特徴は、アプリケーションの中核的な内容であるモデルと、その表現手段であるビューを分離することです。次の図は、時計アプリケーションのモデルに該当するオブジェクトが、アナログ表示とデジタル表示といった複数のビューによって表現されるイメージを表したものです。モデル部分は、先ほどの概念クラス図で定義したクラスのインスタンスであることに注意してください。
図3 アナログ表示とデジタル表示のイメージ
◇UMLでのパターンの表現
特に単体で動作するスタンドアローンアプリケーションなどの場合は、MVCアーキテクチャパターンの実現に、デザインパターンのひとつであるObserverパターンが利用されることが多いでしょう。Observerパターンでは、あるオブジェクトに変化があった際に、他のオブジェクトへ通知を行います。
次の図4は、UMLのコンポジット構造図の要素であるコラボレーション(協調)によって、時計アプリケーションでObserverパターンが採用されていることを表現したダイアグラムです。パターンとは、よくある問題やそれに対する解決方法をカタログ化したものですので、「考え方」を再利用するものと捕らえることができます。この図のコラボレーションは、その「考え方の再利用」を時計アプリケーションに当てはめていると言えます。
「コラボレーション」は、複数のインスタンスが、どのように協調して共通の目的であるタスクを遂行するかを表すため、ある側面以外の詳細な内容は省略されます。詳細な内容のうち、特にオブジェクトの相互作用などは、コラボレーションに関連付けられた別のダイアグラムで記述することができます。
図では、時計アプリケーションで「Observer」という名前が付けられたコラボレーションが行われることが示されています。時計アプリケーションのObserverコラボレーションには、状態の変更が通知される側のオブジェクト(subject)として「アナログ表示」クラスのオブジェクトが、通知する側のオブジェクト(observer)として「時刻」クラスのオブジェクトが参加します。ここでの「アナログ表示」クラスは、アナログ時計を表示するためのクラスです。
図4 時計アプリケーションでのObserverコラボレーション
図4を図5のように別の書き方で記述することができます。2つの図は同じ意味を表しますが、例えばパートであるオブジェクトに着目したい場合と、パートの型であるクラスに着目したい場合などで記述方法を選択します。
図5 時計アプリケーションでのObserverコラボレーションの別の記述方法
Observerパターンを実装上のフレームワークとして再利用する場合などには、次の図6のように、コラボレーションに参加するクラスを抽象クラス(またはインターフェース)として定義する方法が考えられます。
図6 抽象クラスを利用したObserverコラボレーション
コラボレーションが別のコラボレーション内で共通的に存在することを表す「コラボレーション使用(協調使用)」や、「考え方」の再利用だけではなく、モデル上での定義を再利用するための「パラメータ化コラボレーション」については、また次の機会にご紹介することにします。
◇まとめ
今回は、MVCパターンを利用し、モデルとビューを分離する例である時計アプリケーションと、UMLのコラボレーションを利用してパターンを表現する方法をみてみました。時計アプリケーションで行われる相互作用などの詳細や、コラボレーションの高度な利用方法については、また次の機会にみてみましょう。
◇書籍紹介
実装に密着したパターンをUMLで管理する方法に関する詳細につきましては、弊社社員が執筆に関わりました「現場のUML」をご参照ください。
 |
現場のUML |
【著作】 浅井麻衣/重田正俊/橋本大輔/浜口弘志/藤井啓詞
【監修】 桐越信一/長瀬嘉秀
【出版】 株式会社ソーテック社
|
また、UMLによる設計/開発・支援に関しましては、弊社テクノロジックアートで提供しておりますトレーニングコースや、コンサルティングサービスをご活用いただけます。
■筆者紹介 照井 康真/Koma Terui 株式会社テクノロジックアート UMLモデリンググループ グループリーダー シニアシステムコンサルタント
|