| |||
第1章 UMLって何? |
なぜUMLを使うのか?UMLはUnified Modeling Languageの略で,オブジェクト指向分析,設計におい てシステムをモデル化する際の記法(図法)を規定した言語(ビジュアル・ラン ゲージ)です.UMLは現在のソフトウェア開発において事実上の標準となってき ており,これを学ぶことは開発者として必須要件になってきました.では,何 のためにUMLで図を書くのかって?用途はいろいろ考えられますが,以下の3 つのレベルが考えられます.
それぞれのレベルでの使い方を簡単に説明しましょう.
■ レベル1 これを乗り越えるには,自分の考えを整理することが必要になります.プログ ラムだけを見ていたのでは,どうしても視点が小さくなりがちです.このよう なとき,プログラムをUMLで図解してみましょう.UMLはプログラムの構造や動 きを図でとらえることができるため,見通しよく全体を目で捉えることができま す.これが,UMLの利用法レベル1です. ■ レベル2 さらに,プログラムの規模が30,000行を超えると一人で開発するのが難しくな ります.チームを組んで開発することになりますが,その際には分担を決めた り,システム全体の構造(アーキテクチャ)を決めたりする必要があります. 職業としてシステムを開発する,いわゆる「プロ」の現場では,これが通常の 姿でしょう. その際に,設計を検討するための図としてUMLを使うことができます.数人でシステ ムの設計を討議することがよくあるでしょう.ホワイトボードなどを使って絵を描く 際にもUMLは役立ちます.全員がUMLの語彙を持っていれば,簡潔かつビジュアルに設 計の方針を示すことができます.あるいは,UMLの図をきれいに効率良く描くことが できる市販のCASEツールがいくつか存在します.これらを使ってもかまいません.こ れが,UMLの利用法レベル2です. ■ レベル3 最後に,これがもっとも大切なことなのですが,システム開発とは「プログラ ムを正しく書く」ことではなく,「正しいプログラムを書く」ことです.プロ グラムが正しいかどうかを決めるのは,そのシステムのユーザやそのシステム に対価を支払う人,すなわち顧客です.ですから, システム開発では開発者がユーザや顧客と対話をして,どういうシステムを作る のかを合意する必要があります.この場面でも,UMLは活躍します.ユーザや顧客は一 般的にシステムを利用する機能に興味があり,プログラムの内部構造には興味は ありません.UML では,システムがどういう機能を持つのかをも表現できます. UMLで機能を記述し,それをもってユーザや顧客と話合い,システムの仕様を 決めます.これが,UMLの利用法レベル3ということになります. 以上のように,UMLを理解することでさまざまなレベルでのコミュニケーショ ンに役立つことになります.さらに,より多くの人がUMLを理解すれば,その コミュニケーションはいっそう容易になります.自分のために,チームのため に,さらには正しいシステムを作るために,UMLを習得しましょう. |
UML のあゆみソフトウェアの図法としては,古くはフローチャートやデータフロー図, データベースのER 図などが知られています.オブジェクト指向が脚光を浴び, 90年代前半にオブジェクト指向分析,設計を支援する様々な方法論(メソドロジー)が出現しました. Grady Booch による Booch Method,Jim Rumbaughによる OMT(Object Modeling Technique)などが有名です. この時代の問題は,各方法論で図の記法が異なっていたことです. その後しばらく記法にまつわる「宗教論争」のため,記法の統一がなされませんでした. 表現されている概念が同じであるのに表記法が異なっていたので, 実際に記法を使用する設計者たちは混乱してしまいました. 例えば,OMT ではクラスは長方形で描かれたのに対して, Booch Methodではクラスは雲型で書かれていたのです.また,両記法は開発者寄りで, ビジネスや利用者の視点が少なかったことも問題です. 記法統一への試みは,1994年に始まります. Grady Booch と Jim Rumbaugh が手を組んで,Unified Method 統合への協力が開始されました. また,ビジネスや利用者の視点でシステムを捉える「ユースケース」の概念を初めて著した OOSE (Object Oriented Software Engineering)の Ivar Jacobson も1995年にこれに加わり, UML1.0 が 1997 年に発表されました.この3人のメソドロジストのことを,愛着を込めて スリー・アミーゴ(three amigos)と呼ぶことがあります. この間,多くの他の研究者からの提案が加えられています. UML 1.0 は OMG(Object Management Group) に提案され,改良されたUML 1.1 が,OMG より標準化認定を受けることになりました.その後も,UML RTF(Revision Task Force)によってUMLの改訂は続けられています.1998年に UML 1.2 が,1999年にUML 1.3 がRTFから提出されました.UML 1.3は非常に安 定したバージョンであり,現在広く認知・利用されています.2001年秋現在の 最新バージョンは,UML1.4 となっています.詳細な仕様は,以下からダウン ロード可能です(もちろん英語). http://www.omg.org/technology/documents/formal/uml.htm また,おそらくバージョン1最後のマイナーバージョンとなるUML1.5の改訂作業も続けられています. さらに,最初のメジャーバージョンアップである,UML 2.0へのロードマップも定まってきているようです. さらに,2002年に向けて,UMLをISO(International Organization for Standardization) 標準に提案する動きもあるようです.こうなれば,UMLは完全な業界標準となり 産業界に大きなインパクトを与えるようになるでしょう. 表1: 3大メソドロジスト
| ||||||||||||||||||||||||||||||||||||
UML はビジュアルなモデリング言語UML は,オブジェクト指向分析・設計においてモデリングを行う言語です. え,言語なの?と思われるかもしれません.言語とは,意図を表現し,伝達し, 記録するものであると広く捉えるならば,日本語や英語が自然言語であり, JavaやC++がプログラミング言語である,というのと同じ意味で,UMLは 「モデリング言語」と言うことができます.さらに,JavaやC++がテキスト言語 であるのに対して,UMLはビジュアル言語ということができるでしょう. UMLは,扱おうとしている問題を明らかにしたり(分析),その解決法を組み立 てる(設計)際に,問題を図としてモデリングする過程を助けます.描かれたモ デルを複数人で共有してコミュニケーションしたり,自分一人でも考えをまと め,アイディアを展開する作業を助けます.これらの側面から,UMLの意図を 表現し,伝え記録するという役割,すなわち「言語」としての役割が明らかになると思います. さて,UMLに規定されている図を,ダイアグラムと呼びます.UMLのダイアグラムには以下のものがあります.
| ||||||||||||||||||||||||||||||||||||
分析,設計プロセスと UMLUML では記法(ノーテーション)とその意味(セマンティクス)が定義されていま す.ただし,その図をどの開発フェーズでどのように使用するか,という「開 発プロセス」(開発工程)には意図的に触れられていません.これは,UMLの統 一過程で,プロセスと記法とが一体になって論争の的となるのを避け,まずは 記法のみを統一しようとしたことの現れでしょう. とはいっても,実際の開発でどのように使うのかを明確にしないと,なかなか 利用しにくいと思います.ここでは,大まかな使用法の例を書いて見ます. なお,実際にプロセスの中でUMLを利用する具体例は,3章で詳しく解説します. [分析フェーズ]
[設計フェーズ]
一方,システムの論理的な側面とは別に「アーキテクチャ」を決めておくこと が重要となります.アーキテクチャは使用するハードウェアや分散環境,デー タベース,通信,GUI, 言語やライブラリなどの開発基盤,さらには過去の資 産や組織体制などの環境的,政治的要因で決定されます.全く新規の開発では, アーキテクチャの決定は設計フェーズで行われることが多いですが,現実的 には,分析と並行して行われることもありますし,すでに決定されたアーキテ クチャにしたがって設計を進めることも多くあります. UML では,物理的なソフトウェアおよびハードウェアの構成はそれぞれコン ポーネント図や配置図で記述することができます.
[実装フェーズ]
[パターン]
分析においての概念モデル構築の際には,「アナリシスパターン」 (*)という分析レ ベルのパターンがまとめられています.また,設計モデルの構築の際には,「デザイ ンパターン」という設計イディオムがあります.さらに,アーキテクチャのパターン を集めた「アーキテクチャパターン」も存在します. パターンには,それを利用する際のトレードオフや他のパターンとの関係なども記述 されています.パターンを知ることで過去何度となく繰り返された設計・分析上の発 明・発見のエッセンスを知識として得ることができます.現代的な設計者にとって, パターンのボキャブラリは必須科目となるでしょう(*). |
図1: 開発プロセスの流れ ┌......................┐ : アーキテクチャパターン : └......................┘ : ┏━━━━━━━━━━━━━┓ ↓ ┏━━━━━━━┓ ┃物理的,技術的,歴史的環境┠ ─→┃アーキテクチャ┃ ┗━━━━━━━━━━━━━┛ ┗━━┳━━━━┛ UML ┃ ┏━━━━┓分析 ┏━━━━━┓ 設計↓ ┏━━━━━┓実装 ┏━━━━━━━━━┓ ┃顧客要求┣フェーズ→┃要求モデル┣フェーズ→┃設計モデル┣フェーズ→┃実装モデル(コード)┃ ┗━━━━┛ ↑ ┗━━━━━┛ ↑ ┗━━━━━┛ ┗━━━━━━━━━┛ 自然言語 │ UML │ UML Java/C++/C# ┌........ ┴.......┐ ┌......┴.......┐ : アナリシスパターン : : デザインパターン : └..................┘ └..............┘ |
脚注(*): パターンに関する重要な文献を参考文献1, 2, 3として挙げておきました. [繰り返し型プロセス] 上記のプロセスでは,分析フェーズ,設計フェーズ,実装フェーズと順序よく工程を 並べてみましたが,実際の開発ではこのようなウォーターフォール型ではなかなかう まく行かないようです.問題が発生しても,逆戻りしにくく,手遅れになるリスクが つきまといます.ウォーターフォールに対して,最近はイテラティブ(反復型)と言っ て,分析から実装までのフェーズを何回か繰り返して行う手法が主流です.すばやく 反復を行うことによって,早期にリスクを軽減しようという考え方です.例えば RUP(Rational Unified Process)などが有名です. さらに一歩進んで,反復単位を2週間程度にまで細かく行うプロセスも提案されてい ます.そう,今最も注目されている開発手法である,XP(eXtreme Programming)で す.XP では,二人組になったプログラマが日々分析,設計,実装,テストを繰り返 します.極限にまで(Extreme に)反復単位を短くし,フィードバックを得ながら開発 を進めます.XP については別記事に譲ることにしましょう.
|