オブジェクト指向のこころを読んだ

TD;DR

雰囲気でオブジェクト指向言語を使っていた

今まで、オブジェクト指向言語を日常的に利用し、プログラミング言語の書籍に書いてある「オブジェクト指向」の使い方やインターネット上の断片的な情報を元に『オブジェクト指向』を使ってきました。

エンジニアにとってアプリケーションの設計は永遠のテーマであり、私もドメイン駆動設計関連の記事や書籍をいくつか読んでは完全に消化仕切れずにいました。 段々わかってきたのがドメイン駆動設計はオブジェクト指向の延長線上にあるっぽいということ。

そもそも自分は現状もっとも広く利用されているオブジェクト指向というパラダイムをを中途半端にしか理解できていないのだからドメイン駆動設計を学ぶ段階になかったのです。

ということで、オブジェクト指向の書籍を探したのですが、複数の知人がおすすめしていたためこちらの書籍を選びました。 電子版がなく大型本なので物理的に読みやすくはなかったのですが、内容は非常に良かったので満足しています。

本書のながれ

まず、とあるシステムを題材に継承を多用した従来のオブジェクト指向の手法で設計をし、要求の変更があった際の保守性や柔軟性といった継承の問題を示します。
その後、いくつかのデザインパターンを紹介し、先ほどのシステムをデザインパターンを利用した形で再度設計します。
これによって、特殊化と再利用目的とした継承ではなく、デザインパターンを利用することでより堅牢で柔軟な設計が可能であることが説明されています。
また、既存のデザインパターンはそれぞれ特定の状況で適用するものですが、インターフェースを用いて設計し、集約を用いて流動的要素をカプセル化するというデザインパターンの教訓はどのような設計でも適用可能であり、それに従うことで柔軟な設計が可能なことが語られ、オブジェクト指向の原則をより深く解説されています。

プログラミング言語入門本では、継承などの機能的な側面は説明されてもなかなかクラス・オブジェクトの責務や実装、設計のカプセル化といったトピックは深く説明されないことが多いと思います、本書では実際にパターンを利用して設計するプロセスを見せることでオブジェクト指向の本質を実感できるつくりになっています。
本書を読んだことで、オブジェクト指向の階段を確実に進んだ実感がありますし、本書で紹介されていないデザインパターンについてもひと通り理解しておきたいというモチベーションも生まれました。

関数型言語への興味

オブジェクト指向をある程度「うまくやる」方法は理解したものの、そもそもオブジェクト指向で語られる適切な抽象化というものが非常に難しいことは日々実感しているところである。

そんな中ふと、オブジェクト指向関数型プログラミングを検討した記事を読んだことでオブジェクト指向以外のパラダイムも勉強してみたいなーと思ってしまった。
Elixir から Elm の流れで、いよいよオブジェクト指向に対する懐疑心が無視できないレベルに達した2017年冬。

近年おおくのOOP言語は関数型言語から機能を輸入はしているものの、やはり純粋関数型言語をやらないと関数型プログラミングのなんたるかはわからないだろうなーと思い とりあえずすごいHな本を買ってしまったので、地道に読んでいきます。。

オブジェクト指向のこころ