代碼復(fù)用包括兩個方面:概念復(fù)用和實現(xiàn)復(fù)用。這兩者在C++的虛擬函數(shù)設(shè)計中是合二為一的,結(jié)果概念上的模糊往往造成繼承機制的濫用。為了復(fù)用我們往往在
基類中塞入過多的職責(zé),并在程序中制造了過多的層次。java的interface是純粹的概念復(fù)用機制,實現(xiàn)方面的復(fù)用我們一般通過Impls類或者
Utils類來進行,即將代碼片斷寫為靜態(tài)函數(shù)。一般應(yīng)該避免在類中寫特別多的幫助性成員函數(shù),因為成員函數(shù)隱含的通過成員變量相關(guān)著,比靜態(tài)函數(shù)要更加
難以控制。
類是一個整體的概念,整體概念失效了,類也就不存在了。從這一點上來說,它未必是比靜態(tài)函數(shù)更加穩(wěn)定。概念與實現(xiàn)是兩個不同層面的東西。實際上它們一般也
是多對多的關(guān)系。同一個概念可能換用多種不同的實現(xiàn),而同一段功能代碼也可能在多個類中使用。
代碼復(fù)用的意義不僅僅在于減少工作量。實際上復(fù)用是對軟件的一種真正的檢驗,而測試僅僅是一種模擬的檢驗而已。每一次復(fù)用都是對代碼的一次拷問。在不斷使
用中感受到不同使用環(huán)境中的各種壓力,才能實現(xiàn)概念的不斷精化并確保實現(xiàn)的正確性。