【オブジェクト指向のこころ】5章 デザインパターンを学習する理由

デザインパターンとともに学ぶオブジェクト指向のこころ」の学習記録。
「第5章 デザインパターンの紹介」のまとめ。

デザインパターンを学習する理由は?

  • 解決策の再利用:
    確率されている設計を再利用することで、細々とした詳細を避けることができる。何度も繰り返されている問題の解決策を自分が発明する必要がなくなる。
  • 共通用語の確立:
    コミュニケーションを円滑にし、チームワークをよくするためには、問題に対する共通のボキャブラリと共通の認識を持つ必要がある。デザインパターンによってプロジェクトの分析工程と設計工程における共通の基準点ができる。

パターンによって、問題領域や設計工程、オブジェクト指向というものを高いところから見渡せるようになる。
これにより早すぎる段階で詳細に捕らわれることを避けられる。

開発現場の例

「whileループを使ってXXを行い、そのあとでif分を並べて〇〇を行い、ここでswitchを使い△△、、 」という会話ではコードの詳細は聞けても、プログラムが何を行い、なぜそれを行うのかが全く判らない。

大工の例

板を接合する方法に、蟻溝と留め継ぎがある。
大工には当然、蟻溝と留め継ぎ固有のイメージが頭に入っており、詳細を語る必要はない。

  • 蟻溝: 複雑で手間がかかる。湿度や温度変化に強い。うまく作れば見た目も美しい。
  • 留め継ぎ: 加工が簡単。耐久性は低い。目立たない。

大工は詳細を語らず、蟻溝を掘るか留め継ぎにするか、どっちにする?という会話で済む。
つまりこの質問の意図は、 以下のようになる。

制作に金はかかるけど、美しさと耐久性を備えた継ぎ目にするか、少なくとも保証期限が過ぎるまで持ちこたえる手っ取り早い継ぎ目にするかどちらにしようか?

パターンによって、詳細に捕らわれず、一段高いレベルで会話できるようになる。

その他の利点

大抵のデザインパターンは、ソフトウェアをより修正しやすく、保守しやすいものになる。

その理由は、デザインパターンが時間をかけてテストされてきた解決策であるため。
思い付きで生まれた解決策よりも変化に強い構造となっている。

また、より理解しやすいコードになり保守しやすくなる。

優れたオブジェクト指向設計を生み出すための戦略

GOFは優れたオブジェクト指向設計を生み出すための戦略として特に以下を主張している。

  • インタフェースを用いて設計する
  • 継承より集約を多用する
  • 流動的要素を見つけ、カプセル化する

設計がデザインパターンに当てはまらなくても、デザインパターンを学んでいることで上記の戦略を適用できるようになる。

デザインパターンGoFが生み出したのか?

GoFの書籍で解説されているパターンは彼らが生み出したものではない。
ソフトウェアコミュニティに内に既に存在していた特定の問題を解決する品質の高い設計から学び取ったパターンを洗い出しただけらしい。

まとめ

デザインパターんを学習する理由。

  • 繰り返し発生する問題に対して品質の高い解決策を再利用できる
  • コミュニケーションを円滑化する共通用語の確立
  • 思考を高いレベルへシフト
  • コードの修正容易性を高められるようになる
  • パターンを使用できなくても優れた設計ができるようになる
  • 深い継承階層を避けられるようになる