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(イテレーター)パターンを実装したものです。
Javaを使う方はとくに、これについても早いうちに学んでおいた方がいいかもしれません。

 この他のパターンは、必要が生じたとき、あるいは時間があるときに随時学べばいいのではないでしょうか。
名前
 デザインパターンの名前は、英語です。(英語圏の方が作ったんだから、まぁ当然です)
で、名前って、実はそれぞれのパターンの内容や性質についての、重要なヒントを秘めています。
パターンでは、名が体を表すことが重視されているからです。

 ですので、英語がどうにもこうにも苦手という方も、それぞれのパターン名の意味だけはおさえておくことを、強くオススメします。
できれば、オブジェクト指向における再利用のためのデザインパターンにあらわれる英単語は、全て知っておいた方が、理解が確実になります。
posted by craftsman at 17:33 | 東京 🌁 | Comment(0) | TrackBack(1) | デザインパターン
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/47454454
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック


Excerpt: デザインパターン (建築)建築におけるデザインパターンは、もとは建築家であるクリストファー・アレグザンダーが建築技法として形にしたアイデアである。建築におけるデザインパターンにおいては、建物や市街の設..
Weblog: 建築って何?
Tracked: 2007-10-18 08:34
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。