Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

PHPによるデザインパターン入門 - デザインパターンとは?

このエントリは、Do You PHP?(www.doyouphp.jp)で公開していたコンテンツを移行/加筆/修正したものです。公開の経緯はこちらをどうぞ。目次はこちらです。

 そもそも「パターン」とは何でしょうか?

 英語の「pattern」が日本語に翻訳される場合は、「模範」「手本」「模様」「体系」などになりますが、日本語で「パターン」というと、すぐに思い浮かべるのは、毎回同じ手を使う事を表す「ワンパターン」や、幾何学模様など繰り返し模様を指す「パターン」がありますね。電子分野では「回路パターン」や「パターン認識」、少し離れると、ファッションデザイン界では、デザインの原型やその原型をおこす型紙のことも、「パターン」と呼ぶようです。

 このように「パターン」とは、

  • とある一定の事象が繰り返される規則的なもの
  • 模範や手本となるもの

 を指す言葉である、ということになると思います。

 それでは、本書で扱う「デザインパターン」とは何でしょうか?

 「デザインパターン」という言葉は、ソフトウェア界発祥の言葉ではありません。もともとは、建築家であるChristopher Alexander氏により発表された論文「A Pattern Language: Towns, Buildings, Construnction」(邦題:「パタン・ランゲージ―環境設計の手引き」/鹿島出版会/1984年)に由来するものです。Alexander氏は、建物や市街の設計・建築における様々なトレードオフや問題と、それに対する典型的な解決の方法をまとめました。そして、誰もがわかりやすいよう名前を付け、「パターン」として示しました。これにより、他の設計者が「パターンのカタログ」から必要なパターンを選択して、より要求にかなった建築がおこなえる足がかりとしていく、という方法を提唱しました。

 そして、1987年、OOPSLA(Object-Oriented Programming, Systems, Languages & Applications)というオブジェクト指向に関するカンファレンスで、Kent Beck氏とWard Cunningham氏が発表した「Using Pattern Languages for Object-Oriented Programs」という論文*1によって、この「パターン」という考え方がソフトウェア界に持ち込まれました。これから本書で扱っていく「デザインパターン」のルーツは、このAlexander氏の「パタン・ランゲージ」です。

 ソフトウェア設計における「デザインパターン」も、建築におけるパターンと同様です。ソフトウェアを何度も設計していると、あちらこちらで共通する機能や問題があることに気づくことがあります。その問題を解決するために毎回ゼロから設計していては、非常に効率が悪くなります。このような状況の場合、経験を積んだ開発者であれば、「こういった問題を解決するには、こういう構造でプログラムを書けばうまくいく」といったノウハウを持っているものです。しかし、「ノウハウ」というものは、なかなか人に伝えることが難しいものです。もし、これらのノウハウを他の開発者と共通のイメージとして共有することで、コミュニケーションが円滑に行われるとしたら、どんなに良いでしょうか。

 このノウハウを、他の開発者が再利用できるようカタログ化したものがデザインパターンです。もっと簡単に言ってしまうと「設計のコツの虎の巻」といった感じでしょうか。その「虎の巻」を手にすることで、「良い設計」を何度でも再利用することが可能になります。