GoF本(その2)

第2章を読み終える。
GoF本 - gt-uma

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

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

デザインパターンとは、オブジェクト指向ソフトウェアを設計するときの経験則をカタログ化したもの。特にこの本の著者4名(通称GoF:the Gang of four(四人のギャング達))によって提唱された23のパターンを示す。
GoF本の第2章では、C++によってオブジェクト指向でビジュアルエディタ(ワープロソフト)を作成する例を使って、8つのパターンを導入する意義を紹介している。

  • Composite : 再帰構造をオブジェクト指向の枠組みで捉えたモノ
  • Strategy : アルゴリズムをオブジェクトの中にカプセル化したモノ
  • Decorator : コンポーネントを装飾するための透過的な囲い
  • AbstractFactory : 部品オブジェクトの集合を生成する工場を、複数から一ヶ所選ぶ
  • Bridge : 2つの分離したクラス階層を作り、実装とインタフェースの特定を独立する
  • Command : 要求に統一インタフェースを定義して、要求の実装とクライアントを分離し、またアクセスを集中制御する
  • Iterator : 走査するアルゴリズムを抽象化し、走査するオブジェクトの内部構造をクライアントからカプセル化する
  • Visitor : 安定した構造をもつオブジェクトに対して、多様な解析的機能を実現する

ビジュアルエディタでは、1つの文字・図形・行・段組・メニュー・スクロールバー・コマンド・スペルチェック機能など、あらゆる要素がオブジェクトとして記述されている。
そして、それぞれのオブジェクト毎に「プログラムのメンテナンスを重ねても不変な部分」と「しばしば設計変更される要素」がある。デザインパターンは後者、設計変更したときに他への影響を極力減らすためのカプセル化の処方箋を提示することが目的。
例えば、「文字数カウント機能」や「スペルチェック機能」を追加する毎に、文字オブジェクトや行オブジェクトを設計変更していては大変だし、同じ「ペースト」機能をプルダウンから選択するだけでなくてショートカットキーからも実行できるような設計変更によって、文章を構成するオブジェクトに影響を及ぼすのは変だ。
そのような変更影響をカプセル化するために、オブジェクト指向での「委譲」を活用する。委譲とは、あるオブジェクトの操作を一部他のオブジェクトに代替させる手法で、オブジェクトから他のオブジェクトを呼んで、そのメソッドに操作を渡すイメージ。逆に、入門の教科書で記述されている再利用手法である「サブクラスへの継承」では、再利用をするためにスーパークラスの内部構造を熟知する必要があって、メンテナンス時にカプセル化が有効に機能しないという。