Rubyist必読の一冊「オブジェクト指向設計実践ガイド」の分かりやすい書評!

70年ものキャリアをもつベテランエンジニア、テク博士が納得の本を紹介する新コーナー「テク博士の本棚」。今回はrubyでオブジェクト指向を体系的に学習できる隠れた名著「オブジェクト指向設計実践ガイド」を紹介します。

テク博士の本棚とは


みんなご無沙汰しておったの。元気にエンジニアの勉強をしとるかい?今回、わしの本棚から君たちエンジニア初心者に知ってもらいたい知識を、書評を通じて紹介するぞい。みんなの勉強に役立ててもらえるとよいかの。

▼目次
今回のテーマは「オブジェクト指向」
なぜ学習する必要があるのか?
「オブジェクト指向設計実践ガイド」について
「オブジェクト指向設計実践ガイド」の注目ポイント
テク博士からまとめ

今回のテーマは「オブジェクト指向」


今日紹介する本のテーマは、ずばり「オブジェクト指向」じゃ。みんなよく聞くかもしれないが中々慣れない言葉かもしれないのう。

「オブジェクト」とは、日本語で「もの」を意味するんじゃ。君の使っているPCやスマホ、本や食べ物、あらゆる「もの」を指している。

どういうことかというと、一言で言えば「人間に分かりやすい世界で、プログラムをすること」じゃ。いまみんながコードを書いているプログラムは元々コンピュータが0,1の電気信号として読み取っている。このプログラムを機械語と呼ぶ。

一方、今みんなが書いている言語は「if」や「for」など、なんとなく英語で書かれているじゃろ。これは0,1の信号をプログラム言語の作者が必死に人間でも分かるように意味付けして体系化した結果なんじゃ。

コンピュータが分かる0,1の世界と、人間の住む世界を下図のように正反対とすると、プログラミング言語はちょうど間にいる存在といえるかの。


ここでオブジェクト指向、という概念の説明にやっと入るんじゃが、オブジェクト指向とは「いかにプログラミング言語で実際の世界に近い表現ができるか」ということに特化する、という考え方なんじゃ。カレーを作る時、そこにはじゃがいも、人参、お肉、ルウといったオブジェクトがあり、それぞれ切ったり煮込んだりしてカレーを作るじゃろう。それをそのままプログラムの世界でも再現する、ということじゃ。

図でいうと、オブジェクト指向プログラミングはプログラミング言語と人間の住む世界の間に属するかの。

なぜ学習する必要があるのか?


「なぜわざわざ人間界に寄せるんじゃ」という疑問を持った者もおるじゃろ。別に、0,1の言語で書けばコンピューターが動くことに変わりは無いはずじゃ。

しかし、ここで注意すべきは「プログラムは一人で書いているんじゃない」という事実じゃ。みんなも自分しかわからないプログラムを書いた経験はないかの。そうすると実際業務で利用すると後でバグが混じった時に直せない、あるいは時間がかかって結果効率が悪くなってしまうんじゃ。

そこで「オブジェクト指向」という概念をプログラムに導入すると、みんなが自然にプログラムを読むことができるようになり、良いシステムが生まれる。

それでは、そんな「オブジェクト指向」を勉強できる本の紹介に移るかの!

「オブジェクト指向設計実践ガイド」について

ざっくりいうとどんな本?


ここで、紹介する本は「オブジェクト指向分析設計実践ガイド」じゃ!この本についてざっくり言うと「rubyを通じてオブジェクト指向を実践する時に、どのような点に注意すべきかを実例を通して勉強できる本」じゃ。筆者はSandi Metzさんといって、rubyの世界では一流のエンジニアじゃ。「Sandi Metzルール」として設計ガイドも作成されている。

「オブジェクト指向設計実践ガイド」の良いところ


オブジェクト指向分析実践ガイドの良いところは「どうすればオブジェクト指向に基づくきれいなコードを書けるのか」という試行錯誤を一緒にしてくれるところじゃ。オブジェクト指向を勉強するときは、つい概念的な説明になることが多く、実践するのは難しくなりがちなんじゃが、この本はコードがオブジェクト指向に育ってゆく過程を丁寧に書いており、本当に読者が試行錯誤して進めるように解説してくれる。

「オブジェクト指向分析設計実践ガイド」の注目ポイント


注目はずばり、第4章「柔軟なインターフェースをつくる」じゃな。ここではオブジェクト同士のやり取りの設計を通じて、いかに柔軟なプログラムの呼び出しができるかについて説明しておる。旅程に応じて適した自転車を用意してくれる自転車旅行会社があるとして、お客様が旅行を予約したとする。すると、お客様クラスは旅行クラスに旅行の予約を行うプログラムと、適切な自転車を呼び出すプログラムを呼び出すことになるのじゃが・・・


「お客様が適切な自転車を選ぶ」というのはおかしいと思わんかね?お客様は旅行を予約しただけじゃないかの。そこで本章では、自転車を用意するメカニッククラスを追加したり、お客様は「旅行を予約する」というプログラムを呼び出し、旅行クラスがメカニックに自転車を用意する、とうような流れにすることで、人間界でも自然な流れでプログラムを作ることを説いているのじゃ。


独りよがりで「動けば良い」でプログラムを作ってしまうと、つい前者のようなプログラムを作ってしまい、後から他の人が理解できなくなるようなプログラムになりがちじゃ。この本では常に実例と改善過程を示し、オブジェクト指向の良さを伝えてくれるのじゃ。

テク博士からまとめ


本当に全てのエンジニアに読んでほしい本なんじゃが、実は具体例が全てSandiさんの趣味である自転車で構成されているんじゃ。自転車に詳しくないととっつきにくいところがあるかもしれんのう。まあ、この本の本質は素晴らしいので、ぜひおすすめじゃ!