1. 程式人生 > >C++和Java,絕不只是語法不同這麼簡單

C++和Java,絕不只是語法不同這麼簡單

          說到面向物件,我們的腦海中立馬會湧現出C++,java,object-C 這幾個大類的語言,甚至是C#。似乎看來,他們都是面向物件的不同實現而已(博主這句話就很C++了)。尤其對於初學者而言,很難顯見他們之間的不同以及設計哲學上的差異,這種差異需要我們有過幾年的程式設計經驗,同時對幾種語言都比較熟悉的時候才能夠深刻的感受到。

      以前有人說C++就是強化版的C++,現在應該沒有人繼續有這種思想了吧。之所以會有這種思想,就是沒有真正心領神會C++的設計哲學,而只是將C++當做一個對C語言進行過封裝和程式碼構造優化的語言而已。其實不然,C++和C是兩個完全不同的世界,新東方的創始人之一的王強,曾在美國貝爾實驗室工作。他曾談到C與C++之間的區別,就曾提到這是兩個完全不同的語言,只是僅僅有部分語言相似而已。帶來對事物的理解也更是不同的,C++的世界觀本質就是面向物件的,而非C語言結構式的世界觀。我們可以很大膽的說,C++的設計哲學是要高於C語言的,它的出現不是僅僅為了填補C語言在大工程方面構造能力的不足,而是創造了一種新的語言和思想,用以工程化設計和實現。

     曾有人詬病,說C++的效率低於C語言,而這個問題早已經被驗證了,同樣的函式,由於C++內部早已經經過十分巧妙的設計和優化,效率不僅不低於C語言,甚至在很多方面會高於C語言的執行方式。

     說完了C語言和C++的不同之後,現在來說說java和C++。我覺得討論他們之間的熱度已經超過了以前對C語言和C++之間的爭論了。喜歡java的人說,java 才是真正的面嚮物件語言,C++屬於半面向物件,甚至還揚言以後C++會被java取代。java由於其良好的記憶體管理機制,導致了程式設計師獲得了生產力的解放,可以進行更多工程方面的工作,而不用陷於程式碼的結構中。今天我們不說語法差異,我覺得對於兩種語言都使用過之後,微小的語法差異並不是他們之間最大的不同。而

兩個語言之間的使用感受不同,才是他們真正的不同。

    1.面向物件思想,對於java而言,每一個操作都是由物件來執行完成的。即所有的操作執行都是由物件這個發起的。而C++則不同,除了以面向物件作為完全的主體之外,還保留了一些較為靈活的設定,可以採用非面向物件的方式執行,這大概是由於它相容C語言才有的特殊性質吧。

    2.記憶體管理機制,Java的記憶體管理是java語言自身進行管理的,它依靠的是一個執行緒優先順序很低的一個執行緒對記憶體進行監控,當有記憶體長時間處於未使用,則對其進行回收。而這一點,C++把這些留給了程式設計師自己。這個雖然看起來是一個極大的靈活度,卻也是導致了C++特別難學的一個關鍵因素。

   3.第三方庫支援,由於java程式設計師的人數在過去的幾年中暴烈增長,導致市場上對於java的一些庫市場也十分豐富。這一點,C++則顯的要寒酸一些了,由於C++的庫主要都是一些底層的應用的API庫,而底層設計和開發的需求相對於應用而言,要少很多。所以C++的庫支援相對要少一些。

   4.對程式設計師的靈活度,這個java是沒有的,由於java主要用作應用層開發,其本身的封裝性,讓程式設計師在酣暢淋漓的程式設計中也無法瞭解到底層的一些實現機制。同時,程式設計師無法直接去操作編譯器,聯結器等等。相比較而言,C++則是方便的多,它甚至可以修改函式執行的入口,函式定義的時間以及其他更為複雜和靈活的操作。

   5.執行效率,不得不說,這個可能是爭論最多的一個地方了。首先,何為效率?是指程式碼執行的速度?還是指我們總得人力成本時間佔比?單純從一兩行程式碼中,我們當然會說C++效率遠勝java。但是,有沒有考慮投入的人力成本和後期的維護成本.由於C++的高深艱澀,其維護成本更是與工程師的水平相關極大,這個成本算起來的話。或許,就不能輕易下結論了。


    總結,其實兩種語言都由來已久,對於程式設計師而言,或許對技術的偏執會讓你喜歡某一種語言而詬病另外一種語言。而這種思想本身就是錯誤的,每一種語言都有他自身的設計哲學,如果只是因為個人使用經驗不足或者對其瞭解程度不夠深入就妄下判斷,這無疑會阻礙自身的進步。

   最後說一句,人生很短,來不及體會那麼多,我要去學python了,慢了就趕不上了。