オブジェクトとイテレーション

2004年1月1日

オブジェクト指向開発の初期段階から、OO設計は反復的かつ段階的な開発と関連付けられてきました。しかし、多くの人が指摘するように、2つ間に本質的な関連はありません。ウォーターフォールでOOを行うことができ、オブジェクトなしでIIDを行うことができます。では、なぜこの2つは密接に関連しているのでしょうか。

決定的な理由はないと思いますが、いくつかの指標があります。1つは技術的な側面です。オブジェクトは非常にきめ細かいモジュール性を実現し、プログラムはインターフェイスと実装の分離を備えた小さな置換可能なモジュールに分割されます。クラスはインターフェイス/実装の分割をサポートするカプセル化を提供し、ポリモーフィズムは単純な置換メカニズムを提供します。

このきめ細かなモジュール性は、うまく行われれば、既存のコードベースに対してはるかに容易に変更を加えることができます。これはIIDにとって重要です。IIDの要点は、最初に包括的な設計がないことです。設計とコードは一緒に増えます。そのためには優れたモジュール性が不可欠です。(この興味深いOO以外の例は、進化するためにモジュール性を重視するUnixコミュニティですが、OOにはあまり熱心ではありません。)

OO界での原動力の多くはSmalltalkに由来しています。Smalltalkユーザーの数は(そして過去に)少なかったものの、声は相対的に大きかったのです。Smalltalkは、IIDをサポートするOO以外の多くの機能を備えた環境です。実行中のシステムへの直接的なコンパイルおよびリンク、ソースコード内をナビゲートするのに非常に役立つ優れたIDE、グラフィカルユーザーインターフェイスの重視(これが一般的になる前)、メモリ管理などの低レベルの問題を隠す環境、大規模なクラスライブラリ。これらの機能はすべて反復を可能にします。(繰り返しますが、Lispコミュニティもこれらすべてを備えており、反復も強いのです。)

したがって、オブジェクトがIIDを促進する技術的な理由がありますが、社会的理由もあります。OO界のリーダーは最初からIIDを押し進めたため、アジャイル運動のリーダーがほとんど全員がOOの人たちであることは驚きではありません。リーダーシップが両方の動きを非常に熱心に受け入れると、コミュニティ全体に影響が及びます。私はこのコミュニティでオブジェクトとイテレーションの両方を当然のものとして確実に育ちました。

これらすべてが、オブジェクトとIIDは相互に必要であるという意味ではありませんが、2つが非常に強い親和性を持っている理由を示していると思います。