GoFのデザインパターン

オブジェクト指向における再利用のためのデザインパターン

オブジェクト指向における再利用のためのデザインパターン

ここ10年でオブジェクト指向を一変させた革命的な技術と言えば,GoFデザインパターンJavaだろう.Java自体の設計にもGoFデザインパターンは大きく影響を与えているようだ.

デザインパターンUMLモデリングと絡めて説明している本もあるようだが,これはキッパリと間違いだと考えている.比率としてはデザインパターンカタログがGoF本の多くを占めるが,GoF本の本質は次のような部分にある.

  • (実装)継承の危険性
  • 実装継承による再利用性の向上は,さほど高くない.
  • インターフェース継承の概念の提案.
  • 実装継承よりもインターフェース継承を使う.
  • 実装継承よりもコンポジションを使う.

GoF本登場以前は実装継承を使った差分プログラミングを絶賛する本も少なくなかったが,GoF本により実装継承はカプセル化を破壊しオブジェクトの依存関係を増やす諸刃の剣であることが示された.それに代わって再利用の主役となったのがインターフェース継承とコンポジションである.これらのことを理解せずにカタログだけを丸暗記したとしても効果は薄いだろう.
さらに言えばそもそも当時はまだUMLが存在しなかった.存在さえしていないものがデザインパターンの誕生に何らかの影響を与えたはずがない.原典であるGoF本においてもUML記述は一切使われていない.デザインパターンカタログにおいてクラス階層やインスタンスの参照関係などを示すのにUML風の表記(OMT法?)は使われているが,それさえもカタログの主役とは言い難く,あくまで概要を示すための略図以上のものではない.
デザインパターンは実装の中から試行錯誤して生まれた設計ノウハウの集大成であり,UML図のようなチャチな技術とは何の関係もない.