ナプキンをコンパイルする
アイデアを描き込んだナプキンを持って、喫茶店から会社に戻ってきたとしましょう。自分のグループあるいは上司に、解決策を説明する必要があります。このため、ナプキンに描いたアイデアをホワイトボードに書き写し、それを見せるため、同僚全員に自分の席に集まってもらいます。ホワイトボードの前で起こる会話を置き換えるソフトウェアツールはありません。しかし、自分のアイデアを会社の外に持ち出さなければならない場合、一般に、ポラロイドを郵送したり、ホワイトボードのデジタル写真付きで電子メールを送信したりすることは好ましいことではありません。あとで参照できるように、ホワイトボードによって、アイデアのドキュメント化が簡単になることはありません。気に入らないかもしれませんが、UML ツールを探して、自分のアイデアを説明するモデルを作成する必要があります。 モデルは単にモデル要素とそれら要素の関係の集まりですが、これらの要素をグループ化して図を形成することができます。これらの図は、モデルのさまざまなビューを提供するため、要素全体をまとめたものより優れています。さまざまなビューを使用して、アプリケーションがどのような構造になっているかについてのストーリーを伝えることができます。モデルを視覚化するために使用する図の種類は、問題によって異なります。 初めて取り組むときに、ユースケース図の作成を選択するかもしれません。これは、プロジェクトの主要コンポーネントを識別する、優れた概観図です。ユースケース図は必要に応じて複雑にすることができますが、実際にはアクターとユースケースの 2 つの主要部品があるだけです。アクターは、システムと相互作用するエンティティーを表します。エンティティーの例としては「顧客 (Customer)」や「銀行の出納係 (Bank Teller)」があり、プログラムと相互作用します。アクターは、サードパーティーのライブラリやハードウェアであることもできます。ユースケース図の主旨は、それらアクターがプログラムとの間で相互作用できることを示すことにあります。たとえば銀行の出納係は「入金」したり、「出金」したりします。この場合、「入金」と「出金」はユースケースです。コードはアクターやユースケースと直接関係しませんが、これらの相互作用は、プロジェクトに特定のコンポーネントが必要であることを明らかにします。 ユースケースを熟考することは、しばしば計画段階で省略されますが、あらゆるプログラマが知っているように、ユースケース分析は最終的に行う必要があります。プロジェクト要件が何であるかを熟考すると、不要な機能を実装したり、必要な機能を忘れたりすることがなくなります。ユースケース図を作成すると、見落とされていることが明らかになる可能性があります。ユースケース図によって不要な機能の追加を抑えることはできませんが、少なくとも、機能が不要であることを教えてくれます。したがって、最初の手順は、ユースケース分析を行なって、ユースケース図を作成することです。チュートリアルでは、ユースケース図の作成プロセスを示します。 ユースケース分析とユースケース図を完了すると、通常次の手順は、システムのコンポーネントをスケッチすることです。頭の中、ナプキン、UML ツールのどれであれ、成功したシステム開発で、この手順が省略されたことはありません。コンポーネント図を形式的に作成する利点は、コンポーネントを構成するクラスおよびインタフェースを定義するのに役立てることができることです。ユースケース図のチュートリアルを完了している場合は、その分析がどのくらい重要かおわかりになるでしょう。チュートリアルの最後にあるユースケース図から、必要なコンポーネントのいくつかが明らかになります。Customer コンポーネント、Account コンポーネント、および Database コンポーネントです。コンポーネント間の相互作用は、コラボレーション図とシーケンス図でさらに定義することができます。これらコンポーネントは、成果となるシステムの一部を表します。これらの成果物は、十分であるとして、上司か顧客、またはその両方から承認される必要があります。コンポーネントが承認されるまで、設計者とプログラマは変動するターゲットを対象としています。しかし、コンポーネントが設定されると、細部の構造面の作業に進むことができます。 この細部設計は、クラス図を作成することから始めます。これにもまた、クラス図作成の詳細手順を示すチュートリアルがすでにあります。正確なユースケース図とコンポーネント図の作成に努力すると、すぐに座ってコーディングを始めようという気になっているかもしれません。しかし、以前それを行い、コーディングを始めたときに必要な関係を理解していなかったために、あとでインタフェースやスーパークラスを作り直す必要があったことを覚えていますか? クラス図を作成すると、すべての構成部品をまとめ上げることが求められ、インタフェースやスーパークラスが必要となる場所や、さらには全体のデザインパターンにまで反映されます。ご存知のように、クラス図の利点は、いくつかのクラスを記述して、同じメソッドを繰り返し記述することになる前に、継承構造を明らかにすることです。 NetBeans UML ツールを利用すると、クラス図に別の優れた一面、すなわちデザインパターンを追加できます。システムの特定のコンポーネントがデザインパターン、または一連のデザインを利用することが分かっている場合は、単にそのパターンをキャンバスにドラッグ&ドロップするだけで、その基本コンポーネントが作成されます。さらに良いことに、ツールは正しくパターンを作成します。デザインパターンが実際にどのような構造になっているかを記憶しようとすることは忘れてください。NetBeans の UML 機能には、すぐに使用できる Gang of Four (GoF) および Enterprise Java Beans (EJB) デザインパターンが用意されています。カスタムデザインパターンをよく使用する場合は、あとで使用できるように保存することができます。 素晴らしいことに、こうした作業は何も無駄になりません。NetBeans の UML 機能を使用していれば、ボタンを 1 回クリックするだけで、クラス図を Java ソースコードに変換できます。ヘッダー、コメント、変数の配置、その他の書式設定など、コードの生成方法に関するオプションを設定することもできます。これらの設定には、生成されたファイルのすべてに著作権情報を追加することも含まれています。コードの生成だけで、開発サイクル中に行う価値のある手順になるはずです。つまり、最初にモデルの作成に時間をかけて、あとでツールに基本コードのすべてを生成させることは、報われるのです。 あらゆる人が、さまざまな方法で作図します。違いは、UML ツールを使用して作図する人には、図が完成したときに、計画の成果として見せるものがあるということです。ナプキンはこぼれた飲み物を拭くために使われて、捨てられることになりがちです。しっかり考え抜かれたプロジェクトはどれも、ユースケース図、コンポーネント図、およびクラス図などの形になり、喫茶店での「心像設計」が終わったあとも長い間残ることができます。 考えられていたことUML は単なるモデリング言語で、あらゆるコーディング言語から独立しています。このため、UML をコーディング言語に変換できるのと同様に、コーディング言語を UML に変換することができます。この処理は「リバースエンジニアリング」として知られています。この処理には数多くの用途がありますが、もっとも一般的な用途は、コードがどのように構成されているかの概要を得ることです: オブジェクトにはどのようなものがあり、それらはどのように関係しているのか?コードを図で見ることによって、コードを見るだけでは明白ではない可能性があるデザインパターンやその他の複雑な情報を明らかにすることができます。NetBeans UML ツールを使用する「ハウツー」チュートリアルについては、「Java アプリケーションのリバースエンジニアリング」という名前のチュートリアルを参照してください。 この記事はチュートリアルではありませんが、NetBeans を使用してリバースエンジニアリングを行う場合、注目すべき 2、3 の手順があります。自由形式の Java コードベースに取り組んでみましょう。このコードベースをリバースエンジニアリングする最初の手順は、NetBeans の「既存のソースを使用する Java プロジェクト」を作成することです。NetBeans のウィザードが、この処理で役に立ちます。プロジェクトが作成されると、リバースエンジニアリングを行うためのメニュー項目がプロジェクトに追加されます。大きなプロジェクトであっても、この処理にかかる時間はごくわずかです。完了すると、UML プロジェクトがプロジェクトツリーに表示されます。 これで、このプロジェクトを自由に操作できます。生成されたモデル要素から図を作成することができます。図に変更を加える必要がある場合は、単にその変更を加えて、コードを生成し直します (「フォワードエンジニアリング」という)。モデルの元のコードを置き換えることも、別の場所に保存することもできます。これらの機能の持つパワーに注目してください。モデル自体からコードを開発できます。この柔軟性によって、モデルのすべてのビジュアル機能、レポート機能を維持し、コードをコンパイルして実行することもできます。それは本当に、両方の一番良いところです。図からコードを作成するのではなく、コードをを入力したい場合は、単純にそうすることができます。部署の責任者からコードレビューを求められたら、コードをリバースエンジニアリングしてモデルを更新し、図を会合に持参すればよいだけです。 リバースエンジニアリングは過去のコードの理解に役立つ非常に有用なツールですが、あらゆる疑問に対する答えを提供するものではありません。たとえば、リバースエンジニアリングによって作成されたモデルからユースケース図を作成することはできません。コードには、ユースケースが必要とするのとは異なるレベルの情報が含まれているため、結果は期待しないでしょう。その他、リバースエンジニアリングしたモデルから作成する意味のない図には、コンポーネント図、アクティビティ図、コラボレーション図、状態図、配置図などがあります。ただし、クラス要素と関係はすべて判明しているため、これらのいずれの図もすぐに作成することができ、そのあと自然に出てくる疑問に対する答えも導き出せます: ユースケースはどうなっているのか? 配置構造はどうなっているのか? 主要コンポーネントはどうなっているのか?完全に開発されたモデルを得るには、図に関係する不足情報を提供する必要があるだけです。 まとめUML は言語です。UML で作業をするための素晴らしいツールが存在するとしても、UML が言語であることに変わりはありません。言語の構造を理解していなければ、ツールにあるデザインパレットはいらいらを引き起こすだけです。言語を「統一」されたものにするため、UML は多数の機能を取り込んできました。この巨大であるということが、UML ツールを煩雑で使いにくくしているのかもしれません。Sun Microsystems は、オブジェクト指向分析と設計のコンテキストで、UML を学習するためのクラスを提供しています。UML のさまざまな要素のコンテキストに関する知識を活かすことで、モデルは高レベルの実用性と効率性を得ることができます。間違った要素でモデルを作成している場合、そのモデルはコードに変換されません。 設計者またはプログラマのどちらであっても、モデリングは、HelloWorld よりも複雑なあらゆるプロジェクトに必要な手順です。一部のモデリング言語は、たとえばデータベース設計などの用途向けに調整されていますが、1 つのモデリング言語を学ぶ時間しかないのであれば、UML はモデリングの業界標準になっています。NetBeans の UML 機能などの UML ツールは、これまで進化してきました。もはやモデリングは、プログラミングを開始したあとに放り投げられる、時間の浪費、または単に学術的な演習ではありません。ツールはプログラミングの完成に役立てることができ、現実にその役割を果たし、コーヒー店での出来事を再現する機会を提供してくれます。 この記事の最終更新日は 2007 年 10 月 19日です
| Documentation | |||||||||||||||||||||||||||||||||