駄目なOO本の見分け方?

正しいアプローチは 良書を読む・・ということなのですが、なにが良書かを判断するのは難しいです。なぜオブ本や憂鬱本が良書として紹介されているのですから、Web の書評の多数決もあんまりあてにならないです。

なので、せめて駄目なOO本の見分け方をちょこっとだけ書こうと思います。とはいっても、毒キノコの見分け方 並にナンセンスな話なので、眉に唾を付けて読んでいただけると幸いです。


OOP とは 「カプセル化」「継承」「ポリモルフィズム」である、という説明(いわゆるオブジェクト指向3点セット) を是としていたり、議論の土台においてある本は ダメだとおもったほうが無難です。

「オブジェクト指向プログラミングとは何か?」[Stroustrup87] (PDF, ただし '91 改訂版) - Smalltalkのtは小文字です に詳しいのですが、これはもともとこれだけの言語機能があれば オブジェクト指向プログラミングをその言語上で実践できると、C++ の作者が定義したもの が伝言ゲームを起こしたモノです。

抽象データ型に加えて、以下の機構がオブジェクト指向プログラミングをサポートするのに必要とされる。

  • 特殊な関数呼び出し機構(仮想関数、動的結合)
  • 型チェック機構
  • 継承機構
  • 多重継承機構
  • アクセスコントロール機構

以上は5点ですが、ここから静的型言語(あるいは C++ )に特異的な3点(型チェック機構、多重継承機構、アクセスコントロール機構)が拒絶されて「抽象データ型+ 継承・動的結合」となったのち、「カプセル化、継承、多態性」に変化して定着したものと思われます。

「オブジェクト指向プログラミングとは何か?」[Stroustrup87] (PDF, ただし '91 改訂版) - Smalltalkのtは小文字です


これらの機能を満たさない OOPL も非常に多いですし、これらの機能があれば OOP 出来る、というだけで機能そのものがOOPなわけではないのです。

OOP だとか 構造化プログラミング だとかいった プログラミング技法は、その技法によってシステムをどの様な姿に描き出すかが重要で、そのための道具に何があれば可能か(あるいは便利か)を列挙しても、その技法そのものを説明するには足りません。

そういうところを意識しないで、「三大」を 「OOP とは」の説明に使っているものは、駄目な本でしょう。(「OOP」 と 「OOPLでできること」 をゴッチャにしてる)たぶん。