「オブジェクト指向でなぜつくるのか」を読んだ
TL;DR 多くの人の「この本を読むべきかどうか」という関心事に先に回答しておくと、「万人が読んでおいて損は無いとまでは言い切れないけれど、オブジェクト指向に興味があって元気もあるという奇特な人間は読んでも良い」です。
オブジェクト指向とは何か
平澤 章さんが書いた「オブジェクト指向でなぜつくるのか」という本を読みました。オブジェクト指向を「難しいソフトウェア開発を楽に行うための総合技術」と表現しながら、「オブジェクト指向とは何か」という問いに対して現実的な解を与えようという一貫した姿勢に親しみを覚えました。
保守や再利用を目的とした技術
目的という側面では「オブジェクト指向はソフトウェアの保守や再利用をしやすくすることを目的とした技術」としています。具体的には「部品の独立性を高めることで、修正が起きた場合の影響範囲を最小限にし、他のシステムでの再利用を可能に」するということです。この辺りは、敢えて教科書的な範疇を出ない説明を提示しているのだと思います。
それ以上でもそれ以下でもない
「オブジェクト指向は現実世界をそのままソフトウェアに表現する技術である」という世間の解釈に対して、「コンピュータは現実世界の仕事の一部を肩代わりするだけである。したがって、コンピュータを司るソフトウェアも、現実世界をそのまま表現するわけではなく、一部の仕事を表現するだけである」としています。本書では、オブジェクト指向をそれ以上のものとして捉えがちな衆目に対して、一貫して批判的な態度を取っています。
例えば、インスタンスとは何かという問いに対して「インスタンスは現実世界に存在するモノをそのまま表現する仕組みではなく、クラスで定義したインスタンス変数が確保されるメモリ領域と考えるべき」としていたり、メソッド呼び出しに対して「この仕組みは純粋にプログラミングの仕組みとして考えられたもので、それ以上でもそれ以下でもありません」と述べている部分には、その姿勢を顕著に感じます。
なぜオブジェクト指向が発展したのか
しかしながら、批判的な姿勢で投げっぱなしにしておくのではなく、そのような解釈の問題をきちんと分析し、筋道の立った説明を試みているところに好感が持てました。「現実世界をそのままソフトウェアに表現するというコンセプトには確かに魅力がある」とした上で、オブジェクト指向を「汎用の整理術」と「プログラミング技術」の2つの側面に分け、これらを区別しながらも、オブジェクト指向の発展にはこれらの相補性の働きが必要だったとしています。
その他
個人的に常日頃から「フレームワークとライブラリの違いは何処にあるのだろうか」という疑問を抱いていましたが、たまたまそこについて筆者の言及があったことは幸運でした (他の題目と比べると瑣末なことかもしれませんが…)。本書には他にもオブジェクト指向に関する多くの知見と主張が含まれています。筆者のスタンスが一貫していること、そのスタンスの取り方が比較的独特であること、この二点に価値があると感じました。いろいろな人間がいるので読んでおいて損は無いとまでは言い切れませんが、この記事を読んでちょっと興味があるという奇特な人間に対しては相応の情報を提供してくれるものと思います。
この本を読んだ人はここ2週間くらいでこの本も読んでいます
「オブジェクト指向でなぜつくるのか」はKindleで読んだんですが、同じくここ最近読んだ電子書籍だとこの辺が面白かったです。特に「know」と「すごいHaskellたのしく学ぼう!」が楽しめたのでお勧めです。