設計

Java言語は比較的若い言語にもかかわらず、オブジェクト指向プログラミングの必要機能をバランスよく実現しているためか、時代の要求にも合致して幅広い分野で利用されています
一方、オブジェクト指向プログラミングはクラスや属性、振舞い、インスタンス、継承、抽象クラス、インターフェースと多くの要素技術があるため、特徴を活用するためには設計に時間がかかるといわれることもあります。

もちろん、要素技術が多ければ慎重に設計しなければいけない事は当然です。時間が限られているからといって必要な検討を省き、Javaを表面的に使ったプログラムを作ってはJavaの効果は発揮されません。必要な検討を効率良く行わなければいけません。そのためには、オブジェクト指向プログラミングという考え方に合わせた設計手順を踏まえ、各検討に合わせた検討ツールを使って「見える化」された状態で検討を深めるため、オブジェクト指向設計のためのモデリングツールであるUMLのダイヤグラムを使うと効果的でしょう。

UML(統一モデリング言語:Unified Modeling Language)はLanguageといっても、プログラミング言語(Programing Language)のようなコードを記述する言語ではなく、処理手順を書き表すフローチャートのような「考え」を図式化(modeling)する決め事としての言語です。
Java言語誕生と同じころ、オブジェクト指向のソフトウェア開発にはいくつかの手法が使われており、手法ごとに独自の記法(モデリング言語)が使われていました。しかし、あまりにも多くのモデリング言語が存在しているとオブジェクト技術自体が普及しないと、有力な3人の指導者が判断しオープンな統一モデリング言語の開発を始めました。そして、1996年UMLとしての最初の仕様が完成。その後も標準化や整合作業、機能拡張が行われ2005年にUML2.0となり、現在の標準となっています。

UML2.0には13のダイヤグラムがあり、大別するとシステムの静的な構造を示す構造図と、システムの振る舞いを示す振る舞い図があり、振る舞い図の中にオブジェクト間のメッセージの受け渡し具合などを示す相互作用図があります。
標準化の功績の反面、

八方美人で肥大化している。
プログラミング言語と同期しているわけではない。
それぞれの図に統一感がない。

などの問題点も指摘されており、13のダイヤグラム全てを利用しなければ「設計」が出来ないわけではありません

ソフトウェア開発という面から考えれば、

1)
要求仕様を整理し
2)
クラス構成を検討し(クラスごとの役割、及び各クラスのフィールドとメソッド)
3)
メッセージ交換するクラス間のメッセージ交換タイミングの検討(メソッドを呼び、制御を戻す適切なタイミング)

を十分検討したいので、
それぞれの検討に以下の図をどのように活用するかを理解すると良いでしょう。

1)ユースケース図(振舞い)
システムが提供するサービスを表現する。開発スコープ(範囲)の明確化。
2)クラス図(構造)
システムを構成するクラスとクラス間の構造を明確化。
3)シーケンス図(相互作用)
オブジェクト間のメッセージの流れ、イベントの発生順序やオブジェクトの生成と消滅を時系列に表現。

なお、UML=オブジェクト指向開発であり、Javaや特定のプログラミング言語に依存しているわけではない点は注意が要ります。例えばJava言語の継承はUMLでは汎化という用語で扱われています。

ユースケース図

クラス図

シーケンス図

設計に戻る