「オブジェクト指向でなぜつくるのか 第2版」を読んだ

技読録

846 Words

2025-04-06 01:30 +0000


オブジェクト指向(以下、OO)って結局なんやねん、という疑問がふと湧いて購入。 後で気が付いたのだが、第3版が4年前に出版されていた。 第2版までは Java を主な題材としていたが、最新版では Python や Ruby が扱われているらしい。

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

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

これまで C++ や Python などのオブジェクト指向プログラミング言語(以下、OOPL)に触れてきたが、そもそもこれらに共通する OO を、私は自分の言葉で説明できないなと気が付いた。

  • OO の定義って誰が決めてるの?
  • OOPL に必要な機能ってなに?
  • 数あるプログラミングパラダイムの中で、なぜ OO なの?

などなど、色々と分かってないことがあったので、OO を再学習する取っ掛かりとして読んでみた。

読んでみて上記の疑問はある程度解決されたと思う。

OO の定義は、何か標準があるわけではないが、歴史的に醸成されてきたものらしい。 Simula67 で生まれた OO の概念(現代ほど成熟してはいない?)が、アラン・ケイらによって洗練されて、Smalltalk で導入されたようだ。 ここでの成功が現代の OOPL に繋がっているのだろう。

現代の OOPL で共通する要素は、クラス、ポリモーフィズム、継承の3つだ1

クラスはデータ型とそのデータ型に関する演算を定義するものである。 OO 以前の言語でありがちな、意図しないデータの更新を防ぐことで、安全性や保守性を改善できる。

ということが分かるような本書は、OO 初学者にとっては OO を俯瞰できる良書だと思う。 より厳密に、具体的に、詳細に OO を知りたい、という人向けに、各章の末尾に参考文献が記載されているのも嬉しい。

個人的な一番の収穫は GoF のデザインパターンを知れたことだった。 個々のパターンはなんとなく知っていたが、ルーツがあるとは恥ずかしながら知らなかった。 早速デザインパターンの本を購入したので、機会があれば紹介したい。


  1. 個人的にはカプセル化、多態性、継承って言う。本書だけを読む分にはどちらで考えても差し支えなさそう。 ↩︎