物件與反覆運算

2004 年 1 月 1 日

從物件導向開發的初期開始,OO 設計就與反覆增量開發連結在一起。但正如許多人指出的,兩者之間並無固有連結。你可以在瀑布式中進行 OO,也可以在沒有物件的情況下進行 IID。那麼,為什麼兩者會如此緊密連結?

我不認為有一個明確的原因,但有一些指標。其中一個是技術層面。物件提供非常細緻的模組化,程式被分割成小型可替換的模組,並將介面與實作分開。類別提供封裝來支援介面/實作區分,而多型性提供一個簡單的替換機制。

這種細緻的模組化,如果做得好的話,可以讓你更輕鬆地對現有的程式碼庫進行變更。這對 IID 來說很重要,因為 IID 的重點在於一開始沒有全面的設計,而是讓設計和程式碼一起成長。良好的模組化對此至關重要。(一個有趣的非 OO 範例是 Unix 社群,它強調模組化以進行演進,但對 OO 興趣不大。)

OO 世界的很大一部分動力來自 Smalltalk,儘管 Smalltalker 的數量很少(而且一直很少),但他們的聲音卻不成比例地大。Smalltalk 是一個環境,除了 OO 之外,還有許多支援 IID 的功能。立即編譯並連結到執行中的系統、一個好的 IDE 可以真正幫助瀏覽原始碼、強調圖形使用者介面(在它變得普遍之前)、一個隱藏許多低階問題(如記憶體管理)的環境、一個大型類別庫——所有這些東西都可以進行反覆運算。(Lisp 社群也擁有所有這些東西,而且也強烈強調反覆運算。)

因此,物件鼓勵 IID 有技術上的原因,但也有社會上的原因。OO 世界的領導者從一開始就推動 IID,這也是為什麼敏捷運動的領導者幾乎都是 OO 人員的原因。當領導階層熱烈擁抱這兩個運動時,對整個社群產生了影響。我當然是在這個社群中長大的,物件和迭代都視為理所當然。

這一切並不意味著物件和 IID 是相互必要的,但我認為這確實說明了為什麼這兩者有如此強烈的關聯性。