オブジェクト指向でなぜつくるのか

先週から体調を崩しており、精神が危機的に脆弱な状態にある。昨日の圧倒的な睡眠を経てだいぶ改善したので、今日は脳を酷使しなさそう=易しそうな本を読んだ。

オブジェクト指向でなぜつくるのか 第2版

オブジェクト指向でなぜつくるのか 第2版

どんな本か

日経BP「なぜ◯◯」シリーズのうちの1冊。プログラミングのパラダイムや歴史、その後の変遷、モデリングや開発手法に至るまで、オブジェクト指向にまつわるいろいろな話が軽い読み物気分で楽しめる。コードはほとんど出てこない。

著者は平澤章さんという方で、リファクタリングレガシーコード改善ガイドといった名著の翻訳にも参加されている。2011年に第2版が出ており、新たに関数型言語の章が追加されている。

有名な本っぽくて要約や感想はインターネッツ上にいっぱいあるのでググってください。

なんで読んだのか

オブジェクト指向をまったく理解できていないという自覚があるため。職業ウェッブエンジニアのくせに。やばない?

いまの勤務先で働き始めるまでまともにプログラミングをしたことがなく(いまだにできたことがない)、入社してからはすでにあるサービスに対して新規機能の開発や既存機能の改善をやってきている。そのため、基本的にオブジェクト指向が前提というか、じゃあオブジェクト指向じゃないってどういうこと?って聞かれるとよくわからないかんじになっててやばい。

本書を読んだ理由は、なんでそうなっているのか?そうじゃないとなにが困るのか?を知ることで、オブジェクト指向に対する理解が深まり、エレガントなコードが書けるようになり、給料も爆アゲした上に部活も受験も大成功し、ひいては彼女もでき、ゆくゆくは結婚を見据えた幸せな生活が待っていると思ったから。そう信じて疑わなかったから。

どうだったか

印象に残ったところや感想など。

全体通して教科書的な基本事項を平易に説明されていて、オブジェクト指向の全体像に緩やかに触れることができた。実際のプログラミングにおいてオブジェクト指向を理解するというよりも、現実世界のモデリングとい右側面を中心に、オブジェクト指向という概念の説明を試みている。

オブジェクト≠モデル

本書は、オブジェクト指向はあくまでのプログラミングのための技術であり、現実世界のモデリングとは切りわけるという立場に立っており、この点が腑に落ちた。

オブジェクト指向と現実世界は似て非なるもの
プログラミングのための仕組みと割り切って理解する

自分がオブジェクト指向に対してわかったようなわからんような状態に陥っていたのも「現実世界と似てるけど違う」というややこしさにハマっていた。あってるようであってない例えがインターネッツにはびこっており、厳しい。よく考えれば当たり前で、現実世界では、モノはクラスから作られないし、メッセージによって行動は決まらないし、非生物は振る舞いを持たない。

データ≒モデル

ビジネスアプリケーションにおけるデータは(おおくの場合)ユーザの記憶を代替するものであり、従ってデータ構造のあるべき設計は、業務分析と要件定義を経てある程度導出される。っぽいことが書いてあった気がする。データ構造がアレだとその上のアプリケーションでどんなにがんばってもアレなのは重々体感している。データ構造の設計だいじ。

型にはめて楽をする

なんで型が存在するのか。「コンパイラにメモリ領域の大きさを教える」「エラー防止」というのは純粋な型の存在意義。オブジェクト指向においては型としてのクラスという概念が生まれ、型チェックの仕組みが生まれた。型チェックすごい。型チェック最高。

未読者のかたへ

本当にオブジェクト指向という言葉自体を初めて聞くくらいの人が入門書として読むよりは、実際のコードでなんとなく知ってるけど改めて理解したいという人向きな気がする。例えば、オブジェクト指向の三大要素と言われる「カプセル化」「ポリモーフィズム」「継承」に関する具体的な説明は最小限にとどめ、それらが生まれた背景やモデリング的側面からの解説に重点を置いている。むしろ、例えを駆使した過剰な説明などなく最小限のコードが示されていてわかりやすいかも。

また、概念のわかりやすさのために正確性も多少犠牲にしている。そのかわり、図や平易な文章、比喩を駆使してとてもわかりやすい内容になっている。余りある。インターネッツ上には本書の記述に対して「間違っている!」と憤るおじさんたちがいて大変厳しい。

どうするか

明日からのお仕事に活かせる、書くコードが良くなる、という内容ではなかったが、自分が書こうとしているコードの意味を言語化できる材料が増えた。のかもしれない。また、オブジェクト指向的発想で現実世界のモデリングを試みるのではなく、あくまでコードを整理するための技法と割り切る、という発想は、今後アレしていきたい。

「なぜ◯◯」シリーズはchillがてら気軽に読めそうだし、こういった脳を使いたくないタイミングをつかって読んでいこうかなあというお気持ちオブジェクト指向に紐付いてデザインパターンモデリングもなんらか体系的にアレしたい。いい歳してまだそんなレベルなのかってかんじだが、これからも知らないよりは知ったほうが少しはマシだと思うので、やっていくしかない。