對任何程序設計語言,語法當然就是基本規則,這如同武學中的一招一式,談不上擴展與境界,關鍵是要記住并熟練,讓一招一式都標準到位,這也是之后境界提升的基礎。
C語言層次:語法 -> 計算過程
在C的境界里,沒有高層的東西,可以說就是蠻干式的技術。要做什么,就是一步一步按各個步驟來,通過一層一層的關系,終于從最初的輸入實現到了最終的結果,所以任務也就完成了。
這個原理很簡單,所以做法也是首先能想到的,最基本的。這在項目簡單不復雜時確實很好,但是當系統龐大復雜時其缺陷也就出現了:
對一個龐大的系統,中間的可能性也就多了,要考慮的情況也就多了。如果還是按這種見招拆招的方式,那么主流程勢必淹沒在無窮無盡的if-else之中,一方面,寫系統的人就容易出現顧此失彼考慮不周的錯誤;而對后來的維護者,就如同是在迷宮中漫游一般的噩夢。即使硬著頭皮忍受煎熬讀這些代碼,就是有深厚功力的人,抓到了主藤蔓終于沒有被迷失,那也是消耗了很多的腦細胞能暫時理解了作者的思路。不過遺憾的是:回頭即忘了。下次查找問題或者修改維護時基本上又需要重頭再來。
C武功的這種缺陷也就催生了后面的設計方式。
小結:C武功精準有效,易于掌握。然而面對復雜問題時會感覺頭緒紛亂,條理不清,無論是對開發者還是維護者,都是令人頭痛的問題。
C++語言層次:語法 -> 對象 -> 算法
C++的境界比C的境界就高了一層。C++思想認為:由于問題域很紛雜,如果用一條流水線來完成這個產品,這個流水線就會很長而且還會引出很多分支,這實在是一種很不利于開發管理的設計。所以我們可以在流水線上加入一些“工廠”。這些工廠就是一個一個的類,他們接受上流工廠的產品,然后按自己的流水線加工,加工好以后再把自己的產品送到下流的工廠。而這些工廠就是一個一個的對象。因為有了工廠,我們眼中就不再是像亂麻一樣的流水線了,而是幾條清晰的流水線聯系著若干工廠,這樣就清晰多了,也非常易于理解了。
在C++世界里,我們把這種思想叫做面向對象,即把問題設計為一個一個的對象域。這樣,對復雜的問題,就能較好的整體把握,各個擊破了!
Java語言層次:語法 -> 對象 -> 算法對象
Java武功的思想基本與C++的相同,兩者都是面向對象,不過其要求的是不允許任何流水線暴露在外,也就是“一切皆是對象”。而C++為了兼容C,可以允許存在全局變量、全局函數等。
然而,在程序設計中,還有一個問題:回調。是的,有許多種情況是程序員不能預估事情觸發的時刻的,只能說明發生了這樣的事情時該怎么辦。在程序設計領域,應對這樣的突發事件,我們只能先向操作系統注冊,告知他如果發生該事情,請執行這個操作。這就叫回調。
而應對回調,C/C++本身沒有提供任何的設施支持,需要我們定義每一個關注的事情。然而Java與此不同,因為Java是在虛擬機環境下運行,支持跨平臺,所以其提供有完備的支持設施。任何你關注的事情,只要去找到它提供的設施進行擴展實現即可。也正是這個原理,所以你也就自然發現Java武功的“面向對象”思想更加徹底。或許,這也是Java與C++在境界上的最大區別了。