做為一種軟件設(shè)計的思想,OO為我們理解軟件和現(xiàn)實世界的同構(gòu)關(guān)系提供了革命性的方法。通過將類屬關(guān)系引入軟件系統(tǒng),為解決現(xiàn)實世界的問題提供了順理成章的角度。
但問題也隨之出現(xiàn)了。在使用OO方法進行軟件工程時,人們又碰到了諸多問題。為了解決這些問題,又產(chǎn)生了諸多的方法,新的概念層出不窮。
OO方法的本質(zhì), 是將現(xiàn)實中存在的各種概念,抽象為類屬關(guān)系,并映射到軟件系統(tǒng)中。讓我們仔細想一想,這有什么不對勁的地方嗎?
回答是有的。
讓我們考慮一下軟件在需求階段的場景,關(guān)于系統(tǒng)的運作,我們在頭腦中已經(jīng)有了一些模糊的概念,這些概念在討論中從模糊到清晰,于是我們嘗試將這些概念分離出來,抽象,為即將開始的開發(fā)工作確定工作的基礎(chǔ),一些類屬關(guān)系,一些運行流程。且慢,為什么我們一開始得到的這些概念就是對的呢?現(xiàn)在大家都知道了,這些概念不一定是對的,但我們可以在不斷的重構(gòu)中逼近正確。
好了,當我們正在逼近的正確的時候,也就是不斷重構(gòu)的時候,不管你玩什么花俏的東西,在任一時刻,系統(tǒng)中始終會存在一個的類屬關(guān)系, 這是OO系統(tǒng)的天條??荚?大提示我們只能站在這個的角度,去觀看我們的系統(tǒng),別的角度不存在。
問題來了,OO方法不允許概念混亂,但在開發(fā)過程中,在重構(gòu)期間,我們的概念其實經(jīng)常是錯亂的,這種錯亂,對于工程性項目而言,可以一直延續(xù)到工程結(jié)束,不去解決它?,F(xiàn)實中,轉(zhuǎn)換場景與看問題的角度,一些概念就有了微妙的差別。
也許你要說,不允許概念錯亂,這難道不好嗎?但人類的思維方式,并不是用OO方法可以完整對應(yīng)的。這就是問題的所在,為什么我們經(jīng)常要采用無法形式化的所謂”錯亂“的思維方式,是因為這樣更清楚,更省力,更符合我們的思維習(xí)慣,更利于我們的溝通。在理想化的最終的軟件中,我們會逐步消除這種錯亂,形成一致性的體系。但這是軟件開發(fā)的最終結(jié)果,在中間過程,我們并不一定要遵循它。
最后的結(jié)論也呼之欲出,OO方法的問題是本末倒置的,它將本來應(yīng)該是放在最后的邏輯一致的概念體系當作了前提,并強迫開發(fā)者時刻遵循。造成的結(jié)果是,無法容納人性化的思維方式,容納橫看成嶺側(cè)成峰的思維技巧。在重構(gòu)過程中,用嚴謹?shù)腛O方法去實現(xiàn)本來錯亂的概念,只會得到更加凌亂的程序結(jié)構(gòu)。方法是,正視并容納這種錯亂,實現(xiàn)所想及所寫,直面腦海中概念的軟件開發(fā)過程。
但問題也隨之出現(xiàn)了。在使用OO方法進行軟件工程時,人們又碰到了諸多問題。為了解決這些問題,又產(chǎn)生了諸多的方法,新的概念層出不窮。
OO方法的本質(zhì), 是將現(xiàn)實中存在的各種概念,抽象為類屬關(guān)系,并映射到軟件系統(tǒng)中。讓我們仔細想一想,這有什么不對勁的地方嗎?
回答是有的。
讓我們考慮一下軟件在需求階段的場景,關(guān)于系統(tǒng)的運作,我們在頭腦中已經(jīng)有了一些模糊的概念,這些概念在討論中從模糊到清晰,于是我們嘗試將這些概念分離出來,抽象,為即將開始的開發(fā)工作確定工作的基礎(chǔ),一些類屬關(guān)系,一些運行流程。且慢,為什么我們一開始得到的這些概念就是對的呢?現(xiàn)在大家都知道了,這些概念不一定是對的,但我們可以在不斷的重構(gòu)中逼近正確。
好了,當我們正在逼近的正確的時候,也就是不斷重構(gòu)的時候,不管你玩什么花俏的東西,在任一時刻,系統(tǒng)中始終會存在一個的類屬關(guān)系, 這是OO系統(tǒng)的天條??荚?大提示我們只能站在這個的角度,去觀看我們的系統(tǒng),別的角度不存在。
問題來了,OO方法不允許概念混亂,但在開發(fā)過程中,在重構(gòu)期間,我們的概念其實經(jīng)常是錯亂的,這種錯亂,對于工程性項目而言,可以一直延續(xù)到工程結(jié)束,不去解決它?,F(xiàn)實中,轉(zhuǎn)換場景與看問題的角度,一些概念就有了微妙的差別。
也許你要說,不允許概念錯亂,這難道不好嗎?但人類的思維方式,并不是用OO方法可以完整對應(yīng)的。這就是問題的所在,為什么我們經(jīng)常要采用無法形式化的所謂”錯亂“的思維方式,是因為這樣更清楚,更省力,更符合我們的思維習(xí)慣,更利于我們的溝通。在理想化的最終的軟件中,我們會逐步消除這種錯亂,形成一致性的體系。但這是軟件開發(fā)的最終結(jié)果,在中間過程,我們并不一定要遵循它。
最后的結(jié)論也呼之欲出,OO方法的問題是本末倒置的,它將本來應(yīng)該是放在最后的邏輯一致的概念體系當作了前提,并強迫開發(fā)者時刻遵循。造成的結(jié)果是,無法容納人性化的思維方式,容納橫看成嶺側(cè)成峰的思維技巧。在重構(gòu)過程中,用嚴謹?shù)腛O方法去實現(xiàn)本來錯亂的概念,只會得到更加凌亂的程序結(jié)構(gòu)。方法是,正視并容納這種錯亂,實現(xiàn)所想及所寫,直面腦海中概念的軟件開發(fā)過程。