表1 23種類のデザインパターン。適用すべき問題状況と適用後の状況を示した
表1 23種類のデザインパターン。適用すべき問題状況と適用後の状況を示した
[画像のクリックで拡大表示]

ここでは,オブジェクト指向設計を支える「デザインパターン」とは何か,また活用することで得られる利点や活用のポイントを述べる。デザインパターンとはオブジェクト指向設計において頻繁に登場する問題を解決するための「常套手段」をまとめたものである。

 オブジェクト指向は,もともとソフトウエアの再利用性を向上させることを目的としており,その仕組みを,いくつも備えている注1)。ところが実際の開発現場では,思うように再利用が進んでいないという状況を時々目にする。

 ベテランの開発者ならば,迷うことなく再利用部品を選択し,開発を進めることができる。なぜならば,ベテラン開発者は,オブジェクト指向開発をする上で解決すべき問題と,問題解決を阻害する様々な制約がある状況を理解しているからだ。さらに,過去に同様の問題や制約をクリアした経験があることを自覚しており,それを再利用することを瞬時に判断できるのである。

ベテランの「ノウハウ」を活用

 「デザインパターン」は,このような設計上の問題とその解法というノウハウを文書化し,開発者同士で共有できるようにしたものである。

 クラスやオブジェクトの再利用性を高めるための手法としては,ライブラリとして提供されているクラスやフレームワーク,コンポーネント注2)などを利用することが挙げられる。デザインパターンを活用することも,再利用の手法の1つだが,他の再利用手法とは根本的に異なる点がある。

 クラスやフレームワークの活用とは,具体的なプログラムを再利用することだ。これに対して,デザインパターンを活用して再利用できるのは,技術者の「ノウハウ」である。

 デザインパターンとは,オブジェクト指向設計において,「頻繁に登場する問題を解決するための常套手段」を整理したものである。一口にデザインパターンといっても,開発者たちが蓄えてきたパターンは膨大だ。中でも,オブジェクト指向開発におけるものとしては,その名も「デザインパターン」という書籍に掲載されている23種類のデザインパターン(GoFのデザインパターン)注3)が最も有名だ。

 表1[拡大表示]に各パターンを適用すべき問題状況と,適用後の状況を示した。Java,UMLなどについての知識がないと,この内容を理解するのは難しいだろう。ひとまずここではデザインパターンの概要と,その重要性を知っておいて欲しい。

 GoFのデザインパターンでは,23種類のデザインパターンを,「オブジェクトの生成」,「クラスやオブジェクトの構造」,「オブジェクトの振る舞い」という3種類に分類している。各パターンには,そのパターンを適用する目的や,適用すべき問題,問題の解法と適用例を示したクラス図,適用することによる結果(メリットとデメリット)などを記載している。

 オブジェクト指向設計を行っている最中に問題に直面したとき,同じような問題を解決する常套手段があるかもしれない。もしデザインパターンのどれかに,直面している問題の解決策が定義されていれば,適切なクラス構造を設計できる可能性が高まる。「先人の知恵」を活用して設計上の問題を解決しようというわけだ。

 以下ではオブジェクトの振る舞いに関するパターンである「Stateパターン」を取り上げて,パターンを適用する前と後でソースコードがどのように変わるかを見ていこう。なお,以下では特に断りのない限り,パターンと言えばGoFのデザインパターンを指すものとする。


中谷 多哉子/エス・ラグーン社長(和歌山大学客員教授)
1980年東京理科大学理学部応用物理学科卒,1994年筑波大学大学院経営政策科学研究科経営システム科学専攻修了,1998年東京大学大学院総合文化研究科広域化額専攻修了,博士(学術)。日本電子計算,富士ゼロックス情報システムを経て現職