Make the Most of IT.

お酒と映画が好きなJava屋さんがRubyとか学んだこと感じたことをつらつらと

【書評】10年後も通用する”基本”が詰まってる 「オブジェクト指向でなぜつくるのか」を読んで

はじめに

久々の投稿ですがまたまた書評です。

普段の業務ではオブジェクト指向の代名詞とも言われるJavaに触れていますが、体系だってオブジェクト指向を学んだことがありませんでした。

そこで改めてオブジェクト指向とはなんぞや?を知るために「オブジェクト指向でなぜつくるのか」を手に取ってみました。

オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―

オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―

全体の構成

本書は大きく分けて以下の4パートに分かれています。

1.導入:オブジェクト指向の全体像と概念(1章、2章)

 パート1では、オブジェクト指向とはどのようなものなのかを大まかに説明した後に、オブジェクト指向の解説でよく耳にする「動物スーパークラスを継承した哺乳類クラスや鳥クラスを作成する」と言った比喩がオブジェクト指向の解説に適していない理由が解説されています。

2.プログラミング技術:OOPフレームワークデザインパターン(3章〜7章)

 パート2では、まずプログラミング言語の歴史を紐解きながらオブジェクト指向がなぜ必要だったのか、オブジェクト指向が登場したことにより登場前に比べて何が便利になったのかが書かれています。また誤った比喩などを使用せず、オブジェクト指向が実際にどのような仕組みで成り立っているのかをソースと図を用いて解説されています。

3.応用技術:UMLモデリング、設計、開発プロセス(8章〜11章)

 パート3では、オブジェクト指向がプログラミング内だけにとどまらず設計や開発プロセスに応用されていることを紹介し、オブジェクト指向を活用した要件定義や設計方法などを例を交えた解説がされています。

4.関数型言語関数型言語でなぜつくるのか(13章)

 パート4は第2版で新たに書き加えられたパートで、オブジェクト指向の対局とも言える関数型言語の特徴を紹介しています。

本の感想

オブジェクト指向とはなんぞや?と言う基礎の基礎から固めたいと思って手に取った本書ですが、結論から言うと大正解でした。

まずパート1から僕の考えは打ち砕かれました。

第2章にてまず下記のソースを用いて、従来からの比喩でオブジェクト指向が説明されます。

// 動物クラス
class Animal {
    void move() {}   // 行動する
    String cry() {}  // 吠える/ 泣く
}
// 哺乳類クラス(動物クラスを継承する)
class Mammal extends Animal {
    void bear() { }  //出産する
}
// 鳥クラス(動物クラスを継承する)
class Bird extends Animal {
    void fly() { }  // 飛ぶ
}

哺乳類も鳥も動物なので行動するし吠える / 泣くから動物クラスを継承してmoveメソッドとcryメソッドを呼び出せるようにする。個々のサブクラスでは各クラス固有のメソッドを定義する。

全てうんうん、せやなせやなと納得しながら読み進めると。。。

現実世界の人やモノはクラスから作られない

!?

犬が生まれるのはオスとメスが発情期に仲良くなった結果としてメスが妊娠するからで、あらかじめ定義された「犬」クラスから作るわけではありません。

!?!?

た、確かに!!!

私はこの説明に度肝を抜かれてしまいました。

ではオブジェクト指向とはどのようなものなのか、オブジェクト指向は実際にどのような仕組みで実現されているのか、それをパート2で解説されています。

曰くオブジェクト指向の特徴はメモリの使い方にあり

メソッドテーブルやメソッドエリアなど馴染みのない言葉が多く登場しましたが、簡潔に書かれた図が非常にわかりやすくとても理解しやすかったです。

パート3ではこれまでの「オブジェクト指向は現実と似て日なるものである」を覆し、オブジェクト指向的思考で現実世界をソフトウェアに落とし込むやり方を紹介しており、さわりだけながら実際の要件定義などでの思考方法を疑似体験することができました。

第2版にて新たに追加されたパート4:関数型言語はですが、これは少し期待はずれでした。

最近Qiitaなどでも目にすることがあり関数型言語についての関心が高まっていただけに、Qiitaで読んで知ってるな。。。と言う内容だったので残念でした。

しかし裏を返すとQiitaを読んだだけで理解することができる関数型言語がかなり簡潔でわかりやすいものなのだと言うことだと思います。

おすすめしたい人

本書はオブジェクト指向がどのようなものかが解説されている本のため、「オブジェクト指向ってよく聞くけどなんなの?」や「動物クラスがー赤ちゃんクラスがーってよく比喩でなんとなくわかった気がするけど結局何が言いたいのかわからない」って言う初心者の方におすすめしたいです。

逆にデザインパターンなど実際にどのように活用したら良いのかの内容は薄めなため、「オブジェクト指向を適用して効率の良いプログラムを書きたい!」などの実践型の知識をお求めの方にはあまりおすすめできません。

最後に

ということで「オブジェクト指向でなぜつくるのか」を読んだ感想について書いてみました。

本書はオブジェクト指向の利点について、オブジェクト指向登場以前と比較しながら解説されており、これまでの誤った比喩では理解しきれなかった「オブジェクト指向の何がいいの?」や「オブジェクト指向って実際に使うとどうなるの?」が丁寧に解説されている良書でした。

第1版が出版されたのが2004年、第2版が出版されたのが2011年ということですが、実際に今でも通用する知識(というか常識?)が詰まっている一冊となっています。

帯にある「10年後も通用する"基本”を身につけよう」に偽りなしです!

オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―

オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―