Rのつく財団入り口

元はTRPG系のWebサイトの入り口だったブログです。最近のIT本の感想など。

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

「なぜ」シリーズの定番本の第2版

 本屋でもよく見かける「なぜ」シリーズはよい本が多いのですがその中のベストセラーの名著の一つ。初版は2004年に出ましたがその後の歴史的変遷や内容の改善を踏まえ、全面的に書き直した2版が2011年に出ました。
 350ページ強とけっこう分厚いのですがフォントも比較的大きく、左右に空白もあり、そして図表も豊富で文章も平易なので読みやすい本です。サンプルコードはほぼJavaですが、だいたいメンバ変数と標準出力をするメソッドを持つ簡単なクラス程度から始まるので、最低限のJava文法が分かれば読み進められます。

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

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

 ターゲットは仕事で開発をする人ならだいたい新人~業界数年目の若手、あるいは非オブジェクト指向の世界から来た方なら何年目でも、そしてプログラミング自体の学習と一緒にオブジェクト指向を勉強したい方、でしょうか。
 他の言語の最近のOOP本で言うとRubyの『オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方』はもりもり設計やコーディングしている中級者向けでそれよりはもっと初心者向け、『アジャイル時代のオブジェクト脳のつくり方 Rubyで学ぶ究極の基礎講座』と同じぐらい?ではと思います。
オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方

アジャイル時代のオブジェクト脳のつくり方 Rubyで学ぶ究極の基礎講座

 著者の方によるサポートページもあります。

平易な解説でオブジェクト指向をじっくり解説

 オブジェクト指向の説明でよくありがちなのが、親の自動車クラスの下に乗用車クラスやトラックがいたり、親の哺乳類クラスがいて子供に人間クラスや犬クラスや猫クラスがいたり、現実世界はすべてオブジェクト指向に置き換えられるとして例として標準出力で「public void 吠える()」メソッドを作ったりしちゃうパティーン。
 こういう簡単な例の説明だとなんとなく分かったような気がするのですが、いざ実際にシンプルな「ナントカ管理システム」開発演習をしたりすると「あれ、あの犬や猫はどこいったんだ? 顧客オブジェクトはどこにいるべきなんだ?」となったり。
あるいはMVCモデルに従ったちゃんとしてるフレームワークの手順に従って既定の親クラスを継承したクラスを実装して動くものが出来上がったあとで、「あれ、これちゃんと動くけどこのDAOオブジェクトとかサービスオブジェクトはOOP的には現実の一体何と対応してるんだ?」となったり。
混乱して結局よく分からなくなったり、OOPに拒否反応を示してしまった人もいると思います。
(この手のたとえ話だと、アルミの型がクラスでその中に材料をじゅーっと注いで作ったパンケーキとかたい焼きがインスタンス……という話の方が実際に近いですね。)

 本書ではこうした曖昧なたとえ話を廃し、最初に、まず現実はとても複雑なのでオブジェクト化なんてできっこない。システムは現実の仕事の一部分だけを肩代わりしてプログラム化するものだ。そしてオブジェクト指向は開発をよりよくするための技法であり、旧来の構造化プログラミングの弱点を解決し、再利用性と保守性を高めて楽をするためのものだ……とすぱっと明快に言い切っています。 そしてOOPの必然性と必要性、歴史的背景、クラス化/継承/ポリモーフィズムの三大要素……とじっくり分かりやすく説明していきます。混乱を招くたとえ話をやめて理論的に、プログラミング世界の歴史の変遷を踏まえて解説しているので分かりやすいです。

 分かりやすいといっても初めて学ぶ人にはきっと難解でしょうが、オブジェクト指向自体がそもそも抽象的でなかなか解りにくい面があるのでそれは仕方ないでしょう。(笑) 学んでいくうち、コードを書いていくうちに、最初は何となくからでも段々と分かっていくかと思います。

多数の周辺知識と歴史的背景

 オブジェクト指向そのものの説明に加え、その周辺技術や技法などのキーワードも多数登場し、システム開発全体の周辺知識の拡充にも役立ちます。ライブラリとフレームワークデザインパターンUMLモデリング、設計技法、アジャイル開発手法、テスト駆動開発リファクタリング……など。
 本自体が教科書的な内容なのでそれぞれの説明は広く浅くですが、何を学ぶにしてもまずはそのキーワードと概要を把握してから。具体的にはそれぞれを深く扱った本なり資料なりを見ていくとして、それぞれの要素の学習のとっかかりとして、特にこれから業界に踏み出す人には周辺技術全体を俯瞰できるものとして、価値が高いと思います。

 オブジェクト指向言語でのクラスや変数がコンピュータの実際のメモリ上ではどう表現されているか、の観点で説明している話も図表があって分かりやすいですね。何を隠そう僕も大学でそういう情報系の授業を受けてなかったので参考になりました。

 多数あるプログラミング言語の歴史的変遷、構造化プログラミングからオブジェクト指向プログラミングへの進化の過程も丁寧に語っているのもよいですね。
 個人的には余談として、言語構築の世界でクラスという言葉を最初に使いだしたのが実は英語圏の人ではなかったという話でへぇーと思いました。こういう四方山話も色々と載っています。

 また、各章にウォーミングアップクイズがあってコラムで世の移り変わりを学べたりします。僕もアラン・チューリングとかは知ってましたが、最初の問題のインパクトのある謎のパワーワード「ネオダマ」が全然分かりませんでした。こんな超絶ダサカッコいいい言葉が90年代初頭はバズワードとして流行ってたのか……(笑)

犠牲にしているもの

 本書は文章も簡単な言葉を使っていて非常に理解しやすいのですが、概念を分かりやすく伝え混乱を避けるために中立性や正確性をやや犠牲にしているというか、著者の主張サイドに故意にはっきり寄せて書いている節があります。
 オブジェクト指向はプログラミングを楽にするための仕組みと割り切るべきなんだ、現実とプログラムの世界は違うんだ、設計工程でのオブジェクト指向は汎用の整理術で、プログラム技術とはまた別物なんだ……とズバリはっきり言い切っているところなど。

 実際の現場で開発する上では、僕の感想としてはもうこの本に書いてある割り切った理解の仕方でまったく正しいと思うのですが、世の中にはそうではないという意見もあるかもしれません。(この本、ネットの感想を見てもほとんど高評価なんですが、1版の頃からたまにえらく批判している記事があったりします)

 こういう、「俺の知っているオブジェクト指向と違う」的な、人によって解釈や定義が微妙に違ったりするところもオブジェクト指向のやっかいな特徴です。何やら哲学めいたモノ、何でもできる魔法めいたモノ、高度にインテリジェントな人だけが優越感を持って語れる学問めいたモノのような側面を持っているためでしょう。
 オブジェクト指向が歴史の中で時に誤解されたり必要以上にバズワードとしてもてはやされた為に、間違って認識されることもあったこうした背景のところは、本書でもかなり文字を割いて何度か解説されています。こういうあまり語られないニュアンス的なところも、これから初めて学ぶ人には役立つでしょう。

2版だけのおまけ

 最後の13章には関数型言語について解説があり、具体的な言語はHaskellでコード例が記述してあります。
 関数型言語オブジェクト指向言語の後継で取って変わるものだ、対立する位置のものだ……というような間違った紹介が一時期されてネットで騒ぎになったりしましたが、実際にはJavaScalaでシステムが作れるように互いに補完しあうものなんですね。かのTwitterが当初Ruby on Railsで構築され、大量トラフィック処理の為に後にJavaScala+その他の構成に移行したのは有名な話です。
 これからJavaを学ぶような人は別にこの章は飛ばしてもよいのですが、自分的にはこの章も面白かったです。関数型言語の考え方や書き方って全然違うですね。

まとめ:オブジェクト指向と開発の基礎を固める良書

 オブジェクト指向は2000年代にやたらもてはやされた頃は色んな本が乱立し中にはトンデモな本も混じっていたのですが、最近はもう開発の常識になって専門に扱っているような新刊本もあまり見なくなっています。その中では確実に価値のある本です。
 これからオブジェクト指向を学ぶ方には、とっかかりを何かで学んだ次ぐらいに理解を深めるのにちょうどよい入門書だと思います。
 手続き型っぽいコードやオブジェクト指向っぽいけどなんか違う気がするコードに触れている方、自分のオブジェクト指向の理解がなんかもやっとしてる方、自分のコードに自信がない方も復習や総括のために再読すると、かなりすっきりとハラオチすると思います。
 著者の方もかなりのベテランであり、開発とプログラミングの世界の歴史的変遷に触れられる本としても楽しめます。巻末の参考書籍もかなり良書が並んでいますね。
 新入社員教育オブジェクト指向Javaの開発演習をカリキュラムに入れている会社なら、副読本や参考書籍にしても良いのではないでしょうか。

 以下余談ですが、僕が本書の1版を手に取ったのは2000年代にJavaStrutsが流行り出してOOPOSS活用がブームになり、早期に波に乗ることができてスキルを伸ばしようやく一人前になれた頃、会社の新人研修制度の講師という当時の自分には大役にアサインされた頃でした。
新人に教えるんだからオブジェクト指向ちゃんと分かってないといけないよね、継続的にスキルアップしてる姿勢を先輩が率先して見せなきゃいけないよね(キリッ)、ということで、当時の机の本棚にこの本が並んでいたような気がします。
 あれから約10年、開発を取り巻く現実世界も大きく変わり、本書の2版に記述のオブジェクト指向を取り巻く世界も大きく変わりました。いつの世も物事は変化していくな……としばし感慨に耽る気持ちで本書を読みました。

 OOP関連の最近の本はこちらのエントリの最後でまとめています。 iwasiman.hatenablog.com