C眼看J - 初窥JAVA
?
最近一直在學習JAVA,出發點并不是像當初學C++那樣,而只是想把JAVA作為下學期參加比賽的工具,帶著這種“浮躁”的心態,使得我總是在想“這個用看么?”、“那個用看么?”。
這是第一次在掌握了一門語言(C++)后學習另一門,而這兩門語言又很有可比性。于是我體會到了比較兩門語言異同的樂趣。
C++放蕩不羈,做每一件事都提供多種途徑來完成,不同途徑之間又有所區別,從而使得語言特性極為豐富。外人看C++書籍,他一定會覺得C++的程序員吝嗇得近乎古怪,多一個拷貝構造函數的代價都不愿意付出,想方設法地向語言特性要效率,這是因為C++的優勢即在于此,如若不善加利用實在是妄用C++啊!JAVA則非常嚴謹,每件事情都只提供不多的做法,而且語法規則極其工整,這帶來的直接好處就是易學,但是選擇范圍小就意味著程序優化的空間不大,當然,效率對JAVA來說從來不是主要目標。
C++要向后兼容C,因此面向對象很不純正,屬于混合型語言,允許全局函數這樣明顯的過程語言成分的存在,但由于先入為主,C++的不正宗反而讓我覺得JAVA很別扭。JAVA基本可以算是一個純面向對象的語言,非面向對象部分只剩下基本類型,還都提供了外包類用于適應對象接口,但是JAVA將main()放在一個隨機(因為放在哪里關系并不大)的類中這一點讓我比較不喜歡,我覺得這是設計上的不合理,為什么程序一定要百分之百的由類定義組成呢?既然main()這么特殊為何不把它單獨拿出來呢?不過這也無傷大雅了,只是給人的感覺別別扭扭的。
其實我曾經思考過這個問題,究竟人類的思維方式是面向對象的還是面向過程的?面向過程的思想就像是:我們接到一個問題后先將其劃分為幾個解決步驟,其中有共性的抽象出來作為函數可以重復使用,然后按步驟執行。面向對象的思想就像是:我們接到一個問題先分析其場景和場景中的要素,將其抽象為類,然后思考為解決這個問題場景中的各個要素分別應該承擔那些任務或者說具備哪些功能,然后程序員所需要做的就是將這些要素組織起來、協調好工作關系,最后啟動這一工作即可。總的來說,在面向過程的思想中,編程者像是一個獨裁者,一個執行者,他對一起都說的算,周圍的一起都像是它的工具――自動化很低的工具,他一一拿起來完成自己心中的計劃;而面向對象的思想中,編程者更像一個組織者,一部電影的導演,他組織劇組里的成員,交代分工和工作時的互相配合,然后在啟動拍攝后退居到幕后,具體工作由手下按照他早已做好的安排來完成。
那么究竟人類的思維方式是怎樣的呢?面向過程還是面向對象?人們解決問題是更愿意扮演操控者還是組織者?這就是因人而異的問題了,說的玄乎點就是思想境界的問題了。人天生的思維方式肯定是面向過程的,就像“把大象放冰箱分三步”一樣是分step one two three的,但是隨著面對的問題越來越復雜憑借一己之力越來越難以掌控,人就得學著放權,學著合作,學著組織,這就很自然地過渡到了面向對象的思想。所以說,我認為人的原始思維方式是面向過程的,面向對象思想是人對問題復雜性的一種妥協。
C++非常注意效率,這是從C繼承的優點,但是效率意味著安全性的缺失,所以很多本應該高級語言本身做的事情它留給了程序員,很多錯誤對C++編譯器來說只會給出一個警告,需要程序員非常全面了解語言的特性才能完全避免此類錯誤。JAVA則注重安全而忽視效率,據說早期的JAVA執行速度比C/C++要慢上20-100倍!當然現在已經大幅度提高,但是效率仍然是JAVA的罩門;不過安全性就好多了,JAVA是一門真正的高級語言,高級語言就應該離機器遠一些,離人類近一些,JAVA編譯器為程序員默默地做很多事,比如Class類對象的內嵌,比如toString()的調用,等等,一切都是為了給程序員提供方便,幫助程序員了卻一切不應理會的煩惱,而只讓其集中精神于用語言解決問題。
C++更像是一個修修補補的作品,它妄圖提供所有人們可能用到的武器,但是人們的需求是隨著時間變化的,所以C++就不斷增加自己的語言特性來適應時代,但是由于是20多年前的語言,某些方面實現地頗為踉蹌,比如解決多線程的方案,比如多重繼承。而JAVA更加年輕,在它出生之時就知道自己應該具備哪些本領來滿足這個時代,因此它的一些特性看起來要比C++自然得多,比如繼承體系中的Object,比如Thread類,比如接口和內部類的配合來實現多重繼承。
這兩門語言產生的背景不同,背負的使命也自然不同。C++來自洪荒,像寶劍,帶著濃烈的英雄主義氣息,應該為能力卓群的獨行俠所佩,它更適合被主人用來完成一些惟其才能勝任的任務――斬妖除魔,而對于一般性的任務,則有殺雞用牛刀之嫌,并無優勢可言;JAVA來自現代實驗室,嚴謹而又整齊,像工具箱,渾身散發著匠人的熟練,不是用來斬妖除魔的,雖能力有限不能殺敵,但是日常生活中林林總總的問題,都可以用它輕易解決,而且上手快好掌握。C++產生的時代,軟件開發還是一個小眾產業,編程人員更多是和系統啊底層啊之類的概念打交道,所以更注重效率而不注重易用性和接口性。JAVA產生的時代,軟件開發已經成為一個必須要很多人通力合作才能完成的工作,而計算機硬件技術的進步也讓效率的重要性降低,所以JAVA更注重接口性易用性從而使它的使用者合作起來更容易也就是很自然的事了。
C++和JAVA,無論是語法還是功能都比較接近,兩者的不同點很有意思地體現出了兩者各自的使命。
胡言亂語一通,其實我在C++和JAVA方面都是菜鳥,只是學習這兩種語言的機會讓我體會到了很多有意思的事,不記下來實在說不過去,故亂述于此。
?
?
?
總結
以上是生活随笔為你收集整理的C眼看J - 初窥JAVA的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IT 事业发展:树立自己的品牌
- 下一篇: Linux内核源代码分析-目录