オブジェクト指向と反復開発
http://martinfowler.com/bliki/ObjectsAndIteration.html
オブジェクト指向開発の初期段階から、オブジェクト指向設計は反復的・漸進的開発とリンクしてきた。だが、多くの点が示す通り、これらはもともと何ら関係がない。オブジェクト指向をウォーターフォールでやることもできるし、IID(反復的漸進的開発)をオブジェクトなしで行うこともできる。ではなぜ、両者はそんなにリンクしてるのか?
決定的な理由があるとは思わないが、それっぽいことはいくつかある。ひとつは技術面。オブジェクトを使えば、粒度の細かいモジュール方式が実現できる。これによってプログラムは、インターフェイスと実装部分に分かれた、小さくて取り替え可能なモジュール群に分解することができる。クラスによってカプセル化が実現でき、インターフェイスと実装部分との切り離しが可能となる。また、ポリモルフィズムによって、取替えのきくメカニズムが実現できる。
こういった粒度の小さいモジュール方式を使えば(それがちゃんと使われるのであれば)、既存のコードを簡単に修正することができる。これはIIDにとって重要なことだ。 IIDでは、最初から包括的な設計など存在しないからだ。つまり、コードと設計を一緒に成長させていくことになる。これには、優れたモジュール方式が不可欠なのだ。(これについて、オブジェクト指向_ではない_面白い例がある。それはUnixコミュニティだ。 Unixコミュニティは、モジュール方式を強調し発展してきたが、だからといって、オブジェクト指向に依存しているわけではない。)
オブジェクト指向の強みの多くは、Smalltalkから来ている。 Smalltalkerの人数は少ないが、その発言力は大きい。 Smalltalkは単にオブジェクト指向というだけでなく、多くの機能をもった開発環境であり、IIDもサポートしている。動いているシステムの迅速なコンパイルとリンク、ソースコードを動き回れる優れたIDE、 GUIへの力の注ぎ方(GUIが一般的になる前からだ)、メモリ管理のようなローレベルのことを隠してくれる環境、巨大なクラスライブラリ、これらすべてが反復可能なものである。(Lispコミュニティにも、こういった強力な反復機能があった)
オブジェクト指向がIIDを推奨する理由は、技術面以外に、社会的な側面もある。オブジェクト指向のリーダーは、早いうちからIIDを推奨していたわけで、アジャイルムーブメントのリーダーたちのほとんどがオブジェクト指向人間だというのも、別段、驚くことではないわけだ。リーダーたちが両方のムーブメントを統括していたために、コミュニティ全体に強く影響を与えることが出来た。もちろん私も、このコミュニティの中で、オブジェクト指向と反復型開発があたり前のものとして育ってきた。
以上のことは、オブジェクト指向とIIDが相互に必要不可欠なものということではなく、なぜ両者にこのような密接な関係があるのかということを示しているのだと思う。