程式設計的具體化與抽象化分類:系統
以我寫程式多年的歷史來看,寫程式除了靠經驗的累積以及開發工具的使用之外,最重要的就是邏輯推演的具體化與抽象化兩個方向,這兩個方向若能互相契合,這個軟體系統就能把錯誤減到最低,而且跑起來也特別的順暢。
首先先想一想我們再解一道代數數學的題目時,總是用一些抽象化的方法,先盡量把因數分解、多項式的加法變成乘式或者除式,然後把就可以找出答案來,但是這個過程除非經過大量的死背經驗,不然很難想出這些抽象的方法,這也是大多數人代數學不好的原因,無法具體化答案。
PS. X^2+2X+1=16 → (X+1)^2=16 → X=3 or -5
記得我剛學代數的時候,每當解不出答案的時候,就是硬寫了一個小程式,把代數的數值從零開始把代數值填入,利用電腦的快速運算,找出最接近的答案,甚至到了微積分的考試的時候,特別去買了一台可以寫 BASIC程式的計算機來找答案,雖然答案對了,但是解題的過程完全無法交代,所以還是被當掉了!
要寫出一套好的系統,抽象化與具體化的能力一定都要能培養,我看了很多的程式,只是在寫流水帳的程序而已,要什麼功能,就寫一個功能,要一個對話窗,就畫一個對話窗給使用者,到最後程式愈來愈大,雖然這個是具體化的結果,但是所有的程式都沒有模組化,前因後果也沒有考慮,當然系統就不好維護,要改一個程序的時候,甚至都沒有辦法修改,而衍生出一些Bug! 這時候就要適當的加入一些抽象化的概念,想辦法分類然後模組化或黑箱化。
我也看過非常抽象化的程式,每一個模組的分的很好,利用物件導向的程式寫出來,但是看程式就像數學的解題過程一樣,非常的刺激,但是維護起來卻十分的困難,要加一項功能,就要花很多的時間!
一套系統在開發的階段,不可能完完全全的仰賴客戶或所謂的系統分析師的紙上作業,實際在寫程式碼的時候一定會發生困難,利用具體化或抽象化的概念,不要讓自己困在中間,才能寫出一套好維護的系統。