第5回「オブジェクト指向のこころ」読書会に参加しました(モンスターボールはカプセル化だね)第5, 6, 7章

第5回「オブジェクト指向のこころ」読書会に参加しました!

オブジェクト指向のこころを読む会 Vol.5

今日やったこと

先週アレグザンダーの建築クイズに時間を使ってしまい、応用問題について扱うことができなかったので、第5章の応用問題について皆で話すところから話し始め、その後第六章と七章の問題を皆で話しました

第五章

応用問題

「慣れすぎてしまうことで、明らかなものを見失ってしまうことがあります」パターンを使うことでなぜこの様なことが避けられるのでしょうか

話したこと * パターンを適応することに熱心になってしまうと、杓子定規にパターンを適用することに躍起になってしまい、ここでいう「慣れすぎてしまうことで、明らかなものを見失ってしまうこと」につながらないか? * 本当の意味での「パターンを使う」とは、そのパターンが生まれる理由となった問題やパターンを用いる目的を理解した上で使うことである。正しくパターンを用いることで慣れてしまい、明らかなものを見失うことを防ぐことができるのでは? * CSD(認定スクラムデベロッパー研修)でも、デザインパターンはパターンを覚えるよりも、そのパターンが解決したい課題に注目をせよという話があった。この問題に関係していそう。

出てきた話を受けて、デザインパターンを覚えていくにあたって、パターン自体だけでなく、そのパターンが解決したい課題について意識できる様になろうと思いました。

パターンにおける「因果関係」と「フォース」の関係とはどの様なものでしょうか

話したこと * フォースとは、問題を解決する際に与えられる無数の解決策の中から、結果として一つの解決策が取られた時に、解決策が一つに選ばれる際に働く力のことを指す。例えば東京から大阪に行くという問題を解決するために得られる解決策として新幹線が取られるが、その解決策が取られる過程で予算や時間などの拘束条件が存在する。この拘束条件がフォースとなる。 * フォースについて理解することはできたが、「因果関係」という言葉が我々が一般的に用いている因果関係とは異なるかもしれない * GoF本の中では、「因果関係」ではなく「結果」と訳されている。実際にconclutionという単語は結果の意味の方が強いかもしれない。 * 問題文を因果関係ではなく、「結果」と読み替えると理解しやすい。これは「結果」と解釈して問題はなさそう。それなら理解できる。

「流動的要素を見つけ出し、カプセル化する」とは、どういったことを指していると思いますか?

話したこと * 例えば、OSの違いによるpathの表記方法の違いを吸収するpython のpath objectが例として考えられる。これはpathの操作と言う流動的要素をカプセル化することによって問題を簡素化している例ではないか * ポケモンモンスターボールカプセル化することによってポケモンと言う流動的要素を隠蔽することができる。複雑な仕様が介在せず、投げるだけでポケモンを繰り出すことができるので、カプセル化だ!

第六章

今回は第六章ではfaçadeパターンの日常生活における例についてのみ話しました。

応用問題

実生活におけるfaçadeの例を一つ挙げてください

  • 何か複雑なものの管理などをお願いするのはほとんどfaçadeでは?
  • 会計士さん、積立NISA
  • 通信技術などの複雑な技術を隠蔽しているチェットツールなどもコミュニケーションにおけるfaçadeかも。
  • お母さんはfaçade?

第七章

今回は第七章で、Adapterパターンの日常生活における例についてのみ話ました

実生活におけるAdapterパターンの例を一つ挙げてください

  • HHKBや自作キーボードなどの自分の好きなキーボードは、既存のキーボードのインターフェースを守りながらも、各個人のタイピングしやすさに適合するためアダプターではないか
  • チャイルドシートは、個人の体格と既存の車のシートの形状を適合するためのアダプターではないか
  • Amazonの梱包は、どんな商品でも同じ箱に梱包されることにより、配送者に配送する商品の形状や積み方を意識させない様にするためのアダプターなのではないか

などの話がありました。

最後に

今回も話がかなり弾み、全ての問題について扱うことはできませんでした。しかし、自分だけで問題を解いている時には出てこなかった答えを他の参加者の方から聞くことができたりなど、ひとりでは辿り着けなかったところに進めている感覚がとても楽しいです!

次回は、次には進まず、今回扱えなかった6, 7章の問題や、本文についての疑問などについて話す会にしようという話になりました!