読者です 読者をやめる 読者になる 読者になる

お布団宇宙ねこ

Haskell ねこ

『デザインパターンとともに学ぶオブジェクト指向のこころ』を読んだ

デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series)

デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series)

なぜ読んだのか

最近、仕事でコードレビューを受けたときに「このコードはオブジェクト指向でないのでは? なんか関数型っぽい」と言われたことで Static おじさん?化の兆候に気がつき、なんとかせねばと思ったのがきっかけでした。

そもそも、何気なく触れていたであろうオブジェクト指向って一体何なんだっけという疑問を改めて解消するために読み始めました。

本書を選んだのは、チームメンバーがおすすめしていた本から選びました。 (教えていただきありがとうございました :pray: )

感想

オブジェクト指向について、本書では次のように説明しています。

オブジェクト指向は、オブジェクトという概念を中心に捉えたものの考え方です。このため、オブジェクトという観点からすべてのものごとを見ることになります。つまり、問題領域を機能に分解していくのではなく、オブジェクトに分解していくわけです。

– 1.6 オブジェクト指向パラダイム

また、オブジェクトについては

概念上の観点に基づいた場合、オブジェクトは責務を備えた実体であると定義できます。こういった責務によって、オブジェクトの振る舞いが定義されるのです。また、場合によっては、オブジェクトは特定の振る舞いを保持した実体であるとも考えられます。

– 8.2 オブジェクト : 従来からの考え方と新たな考え方

私は問題領域に存在するものを核に、その問題領域に存在する要求をメソッドとして肉付けしたものをオブジェクトとし、それらを扱うことをオブジェクト指向だと教わってきました。しかし、そのようなテクニックではすぐに設計が複雑化してしまい、変化に対応することが困難になることを指摘しています。オブジェクトをただの再利用可能な汎用モジュールとして定義するだけでは足りないというわけです。

本書は、変化に対応できるような柔軟な設計にするための道具として「共通性/可変性分析」や「デザインパターン」を用いた設計アプローチについての説明が主ですが、その説明を通してどのようにオブジェクト指向という考え方が使われているのかを知ることができました。また、デザインパターンの使い所についても、デザインパターンを適用するだけですべての問題が解決できるわけではないので、解決しようとしている問題に集中することが重要というのはなるほどなあという感じでした。デザインパターンはある問題に対する解決策の一例として見るべきだったのですね。

まとめ

一番の収穫は、今までの自分のオブジェクト指向の理解では不十分だったことを知れたことでした。旧来の考え方が間違っていたというよりも、問題に取り組むための視点を変えることでより柔軟な設計をすることができるという本書の説明の仕方にしている点も良かったです。

また、今までデザインパターンの本を読んできて腑に落ちていなかった点も、解決しようとしている問題についての比重が少なくデザインパターンを使う上での When , Why が曖昧だったのが原因なのかなと思ったのでした。このような視点を意識しつつ他の本ももう一度読み直してみたいです。