2007-07-11

デザインパターンを学ぶ

 近頃、デザインパターンというのが大きくクローズアップされていますね。
オブジェクト指向でプログラミングをしていらっしゃるあなたも、そろそろデザインパターンについて真剣に学ぶべきかと考えていらっしゃるのではないでしょうか。

このブログでも、今後デザインパターンを扱っていきます。
でも、その前にデザインパターンとは何か?どんなふうに学んでいけばいいのかを、すこしお話ししておきたいと思います。

コンテンツ

  1. パターン
  2. デザインパターン
  3. ソフトウェア開発に限らない
  4. デザインパターンを学ぶには

パターン

 パターンという言葉は、日常よく使う言葉ですね。
「ワンパターン」とかいう言葉があったり、型紙のことを「パターン」と呼んだりします。
繰り返し模様のことを「パターン」と言ったりもしますね。
パターンは、現在のオブジェクト指向開発にとても重要な知識です。
ソフトウェア開発における「パターン」とは、ソフトウェア開発の中で繰り返し現れる問題と、その最適解をまとめたもののことを言います。
繰り返し現れる問題を、明文化された経験則としてまとめておくことによって、大きく分けて2つのメリットが得られます。
  • 毎回考え直さなくても最適な解が得られる
  • 問題と解決策についての知識を共有できる

パターンには、開発作業におけるパターンや業務分析におけるパターン、設計におけるパターンなど、さまざまな領域を対象にしたものがあります。

デザインパターン

 デザインパターンは、ソフトウェアの設計に焦点をあてて、パターンを抽出したものです。
単にデザインパターンというとき、一般にはGoFのデザインパターンのことを指します。
GoFとは、Gang of Fourの略で、エリック・ガンマ、リチャード・ヘルム、ラルフ・ジョンソン、ジョン・ブリサイズの 4 人を指します。
この 4 人が著した名著、オブジェクト指向における再利用のためのデザインパターンこそ、デザインパターンのバイブルです。
GoF のデザインパターンとは、この本に収録されている 23 のデザインパターンのカタログのことです。
たいていの方は、パターンの世界への入り口として、まずこの GoF パターンを学びます。
GoF パターンは、パターン入門でありつつ、いつでも実戦に役立つ大いなる武器です。
デザインパターンとは、まさにこの GoF パターンを指すわけですから、デザインパターンを学ぶのであれば、この本は必須の教科書です。
現在のオブジェクト指向開発は、パターンなしには語れません。
ですので、この本はオブジェクト指向でソフトウェアを開発する全ての人が一度は読むことになる本です。
そしてできれば、常にキーボードの横に置いておきたいですね。

ソフトウェア開発に限らない

 パターンは、ソフトウェア開発に限らず、さまざまなところで役立つ知識でもあります。
実際、パターンというアイデアは、もともとクリストファー・アレグザンダーという建築家のものです。
彼は、パタン・ランゲージ―環境設計の手引 という本で、都市から庭までさまざまな規模での建築法を、パターンのカタログにまとめています。
ソフトウェア開発におけるパターンは、この建築におけるアイデアを、ソフトウェア開発に応用したものです。
デザインパターンを一通り使いこなせる方は、一度この本を読んでみてはいかがでしょうか。
パターンランゲージという概念の元々の姿を見ることができます。
ところで、パターンランゲージという言葉通り、パターンは言語を形成します。
ひとつひとつのパターンにも、もちろん大きな意味がありますが、全体から見ると、それは単語に過ぎません。
パターンを有機的につなげてフレーズとすることで、その力は何倍にもなります。
パターンを学ぶときには、そのことを忘れないでください。

デザインパターンを学ぶには

 さて、デザインパターンもオブジェクト指向と同様、はじめての方にはなかなか理解しづらいもののようです。
ですが、これもオブジェクト指向自体と同じで、コツの問題だと私は思います。
一旦パターンというものに慣れてしまえば、次からはどのパターンも簡単に理解できるようになります。
ここで、私なりのコツっぽいものを解説してみたいと思います。
前提
まず、デザインパターンを学ぶ前提として、オブジェクト指向の基礎が理解できていることはもちろんですが、ポリモーフィズムについても、理解できていた方がいいでしょう。
多くのパターンが、ポリモーフィズムのメカニズムを利用することで成り立っているからです。
逆に、デザインパターンを学ぶことで、ポリモーフィズムへの理解を深めるというテもあります。
でも、できれば一度に学ぶことはひとつにしておいたほうが、混乱が少ないのではないかと思います。
それと、上でもお話ししましたが、GoF のデザインパターンを学ぶのであれば、GoF のデザインパターンの本であるオブジェクト指向における再利用のためのデザインパターンが教科書です。
これを用意しておくことをオススメします。 (というか、必須です)
 また、Java 言語で学ぶデザインパターン入門のように、特定のプログラミング言語を使用してデザインパターンを説明した本もあります。
もし、あなたが得意な言語のものが見つかったら、そういったものもあわせて用意するのも効果的でしょう。
ちょっとずつ
GoF のデザインパターンは23コもあるわけですが、これ全部をひとつのアプリケーションで駆使することは、かなり稀だと思います。
普通は、10 にも満たないのではないでしょうか。
いきなり 23 コ一気に理解するのはかなり大変ですし、その必要もありません。
使えるところから少しずつ理解していった方がいいと思います。
順番
私の経験から見た、オススメしたいパターンの習得順を挙げてみたいと思います。
ただ、これは私個人だけの経験からのものですので、あくまで一例に過ぎないことをご了承ください。
  1. Template Method (テンプレートメソッド) パターンは、最も基本的な、継承とポリモーフィズムの活用法を示しています。
    一番基本的なので、一番頻出するパターンであり、かつ馴染みやすいパターンなのではないでしょうか。
  2. Composite (コンポジット) パターンは、非常に頻繁に適用できるものです。
    このパターンはツリー構造のようなイメージを、クラス階層で表現するものですが、ツリー構造は人間の物事の捉え方に非常にマッチするので、業務上でもよく現れるのです。
  3. Command (コマンド) パターンは、ユーザアクション等、アクションをオブジェクトとして捉えるという考え方を示してくれます。
    この考え方は、さまざまな場面に応用することができます。
  4. Decorator (デコレーター) パターンは、Composite パターンを補完するパターンですので、これも適用する機会が多いでしょう。
  5. Visitor (ビジター) パターンは、Composite パターンで構成されたオブジェクトを走査する強力な手段です。
  6. 2 つの Factory パターン (Factory Method (ファクトリーメソッド)、Abstract Factory (アブストラクトファクトリー)) は、Composite パターンや Command パターンのポリモーフィックな側面をより強化します。
  7. Facade (ファサード) パターンは、Factory パターンをはじめ、他のパターンと組み合わせることで、強力なパワーを簡単に活用できるようになります。
  8. あなたがアプリケーションの根幹をなす設計を任されるような立場なら、Adapter パターンや Proxy (プロキシー) パターン、Singleton (シングルトン) パターン、Observer (オブザーバー) パターンもよく使用することになるでしょう。
例えば Java のクラスライブラリには、 Iterator インターフェイスというものがあります。 現代的な言語のほとんどは、これに類するものを提供しています。 これは、そのものずばりの Iterator (イテレーター) パターンを実装したものです。
これについても、ライブラリの意図を理解する意味で、早いうちに学んでおいた方がいいかもしれません。
それ以外のパターンは必要が生じたとき、あるいは時間があるときに随時学べばいいのではないでしょうか。
名前
デザインパターンの名前は、英語です。(英語圏の方が作ったんだから、当然です)
で、名前って、実はそれぞれのパターンの内容や性質についての、重要なヒントを秘めています。
パターンでは、名が体を表すことが重視されているからです。
ですので、英語がどうにもこうにも苦手という方も、それぞれのパターン名の意味だけはおさえておくことを、強くオススメします。
できれば、オブジェクト指向における再利用のためのデザインパターンのパターン名などにあらわれる英単語は全て知っておいた方が、理解が確実になります。

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...