Tech Blog

Information Technology / Machine Learning / Data Analysis / Big Data / System Integration

デザインパターンのエッセンス

デザインパターン一覧

デザインパターンの記事を書き終えたので、まとめておきます。各々のデザインパターンの詳細は、下記のページをご覧ください。

  1. 生成に関するパターン
  2. 構造に関するパターン
  3. 振る舞いに関するパターン

デザインパターンが重要なワケ

どのような言語でも、プログラミングの学習はたいていの場合、世界にこんにちはとつぶやくところから始まる。例えばJavaの場合は、以下のようになる。

System.out.println("Hello World!");

その後、次のように変数が定義できることを知る。

int a = 1;

次に、関数を定義できることを知る。

int myFunc(int a) {
  return a++;
}

オブジェクト指向に基づくプログラミング言語の場合は、クラスという概念も学ぶことになるだろう。

public myClass {
  public int a = 1;
  public int myFunc(int b) {
    return a + b;
  }
} 

このようにしてプログラムをひととおり学ぶと、どんなアルゴリズムは自分で作れるようになる。これでプログラミングの学習は終わり。めでたしめでたし。…と思いきや、そうは問屋が卸さない。

"好きなようにプログラミングできる"ことは、"どのように実装するかを選択する"ことをプログラマに強いる。そして、プログラマは例えば次のような悩みを持つだろう。

  • 継承と委譲をどう使うか
  • どのようにメソッドを切るか
  • ロジックをどうやって共通化するか
  • 機能と実装をどうやって分離するか
  • 拡張性を保持するにはどうすべきか
  • 再利用性を保証するにはどうすべきか
  • 可読性を高めるにはどうすべきか

これらの悩みに対して、プログラマは長年にわたって知見を蓄積してきた。それらのTipsをプログラム設計のカタログとしてまとめたものが、デザインパターンである。デザインパターンは、プログラマが培ってきたプログラミングのパターンを集約したものと考えてよい。

したがって、綺麗なコードを書くための第一歩は、デザインパターンの理解から始まる。また、あまり気付かれないが、既存のコードを読むためにもデザインパターンの習得が重要である。

デザインパターンを分かりやすく

デザインパターンの解説書や解説しているホームページは数多くあるが、読むのがうんざりするほど長い。デザインパターンの解説なのに、デザインパターン以外の部分がこれでもかと盛り込まれている。また、ページをまたいで解説されているため、理解がしにくい。

そこで、本ブログではデザインパターンのエッセンスだけを以下にまとめた。JavaプログラムをUMLに併記することで、一目で流れを確認できるようにしている。UMLが読める人でJavaの文法をひととおり勉強した人であれば、お役に立つのではと思う。

  1. 生成に関するパターン
  2. 構造に関するパターン
  3. 振る舞いに関するパターン