對于計算機語言的發展史,
業界一般認為:B語言導致了C語言的誕生,C語言演變出了
C++語言,而C++語言將讓位于
Java語言。要想更好地了解Java語言,就必須了解它產生的原因、推動它發展的動力,以及它對其他語言的繼承。像以前其他成功的計算機語言一樣,Java繼承了其他語言的先進原理,同時又因其獨特的環境要求而提出了一些創新性的概念。在這本書的其他各章中,將從實用的角度,對Java語言、庫及應用程序進行包括語法在內的詳細介紹。在本章里,我們將介紹Java語言產生的背景、發展過程,以及使它變得如此重要的原因。
盡管Java語言已和Internet的在線環境密不可分,但首先應該注意到的最重要一點是:它是一種程序語言。計算機語言的革新和發展需要2個基本因素的驅動:
• 適應正在變化的環境和需求
• 實現編程藝術的完善與提高
下面你將看到,Java也正是在這兩個因素的驅動下產生的。
Java總是和C++聯系在一起,而C++則是從C語言派生而來的,所以Java語言繼承了這兩種語言的大部分特性。Java的語法是從C繼承的,Java許多面向對象的特性受到C++的影響。事實上,Java中幾個自定義的特性都來自于或可以追溯到它的前驅。而且,Java語言的產生與過去30年中計算機語言細致改進和不斷發展密切相關;谶@些原因,本節將按順序回顧促使Java產生的事件和推動力。正如你將看到的一樣,每一次語言設計的革新都是因為先前的語言不能解決目前遇到的基本問題而引起。Java也不例外。
一、現代的編程語言的誕生:C語言
C語言的產生震撼了整個計算機界。它的影響不應該被低估,因為它從根本上改變了編程的方法和思路。C語言的產生是人們追求結構化、高效率、高級語言的直接結果,可用它替代匯編語言開發系統程序。當設計一種計算機語言時,經常要從以下幾方面進行權衡:
• 易用性與功能
• 安全性和效率性
• 穩定性和可擴展性
C語言出現以前,程序員們不得不經常在有優點但在某些方面又有欠缺的語言之間做出選擇。例如,盡管公認FORTRAN在科學計算應用方面可以編寫出相當高效的程序,但它不適于編寫系統程序。BASIC雖然容易學習,但功能不夠強大,并且談不上結構化,這使它應用到大程序的有效性受到懷疑。匯編語言雖能寫出高效率的程序,但是學習或有效地使用它卻是不容易的。而且,調試匯編程序也相當困難。
另一個復雜的問題是,早期設計的計算機語言(如BASIC,COBOL,FORTRAN等)沒有考慮結構化設計原則,使用GOTO語句作為對程序進行控制的一種主要方法。這樣做的結果是,用這些語言編寫的程序往往成了“意大利面條式的程序代碼”,一大堆混亂的跳轉語句和條件分支語句使得程序幾乎不可能被讀懂。Pascal雖然是結構化語言,但它的設計效率比較低,而且缺少幾個必需的特性,因而無法在大的編程范圍內使用(特別是,給定的Pascal的標準語言在特定時間是可用的,但將Pascal作為系統級編碼是不切實際的)。
因此,在C語言產生以前,沒有任何一種語言能完全滿足人們的需要,但人們對這樣一種語言的需要卻是迫切的。在20世紀70年代初期,計算機革命開始了,對軟件的需求量日益增加,使用早期的計算機語言進行軟件開發根本無法滿足這種需要。學術界付出很多努力,嘗試創造一種更好的計算機語言。但是,促使C語言誕生的另一個,也許是最重要的因素,是計算機硬件資源的富余帶來了機遇。計算機不再像以前那樣被緊鎖在門里,程序員們可以隨意使用計算機,可以隨意進行自由嘗試,因而也就有了可以開發適合自己使用的工具的機會。所以,在C語言誕生的前夕,計算機語言向前飛躍的時機已經成熟。
在Dennis Ritchie第一個發明和實現在DEC PDP-11上運行UNIX操作系統時,一種更古老的由Martin Richards設計的BCPL語言導致了C語言的產生。受BCPL語言的影響,由Ken Thompson發明的B語言,在20世紀70年代逐漸向C語言發展演變。在此后的許多年里,由Brian Kernighan和Dennis Ritchie編寫的《The C Programming Language》(Prentice-Hall,1978)被認為是事實上的C語言標準,該書認為C只是支持UNIX 操作系統的一種語言。1989年12月,美國國家標準化組織( ANSI )制定了C語言的標準,C語言被正式標準化。
許多人認為C語言的產生標志著現代計算機語言時代的開始。它成功地綜合處理了長期困擾早期語言的矛盾屬性。C語言是功能強大、高效的結構化語言,簡單易學,而且它還包括一個無形的方面:它是程序員自己的語言。在C語言出現以前,計算機語言要么被作為學術實驗而設計,要么由官僚委員會設計。而C語言不同。它的設計、實現、開發由真正的從事編程工作的程序員來完成,反映了現實編程工作的方法。它的特性經由實際運用該語言的人們不斷去提煉、測試、思考、再思考,使得C語言成為程序員們喜歡使用的語言。確實,C語言迅速吸引了許多狂熱的追隨者,因而很快受到許多程序員的青睞。簡言之,C語言是由程序員設計并由他們使用的一種語言。正如你將看到的,Java繼承了這個思想。
二、對C++的需要
在20世紀70年代末和80年代初,C成為了主流的計算機編程語言,至今仍被廣泛使用。你也許會問,既然C是一種成功且有用的語言,為什么還需要新的計算機語言?答案是復雜性(complexity)。程序越來越復雜這一事實貫穿編程語言的歷史。C++正是適應了這一需求。下面介紹為什么對程序復雜性的更好管理是C++產生的基本條件。
自從計算機發明以來,編程方法經歷了戲劇性的變化。例如,當計算機剛發明出來時,編程是通過面板觸發器用人工打孔的辦法輸入二進制機器指令來實現的。對于只有幾百行的程序,這種辦法是可行的。隨著程序不斷增大,人們發明了匯編語言,它通過使用符號來代替機器指令,這樣程序員就能處理更大、更復雜的程序。隨著程序的進一步增大,高級語言產生了,它給程序員提供了更多的工具來處理復雜性問題。
第一個被廣泛使用的高級語言當然是FORTRAN。盡管FORTRAN最初給人留下了深刻的印象,但它無法開發出條理清楚易于理解的程序。20世紀60年代提出了結構化編程方法。這種結構化的編程思想被像C這樣的語言所應用,第一次使程序員可以相對輕松地編寫適度復雜的程序。然而,當一個工程項目達到一定規模后,即使使用結構化編程方法,編程人員也無法對它的復雜性進行有效管理。20世紀80年代初期,許多工程項目的復雜性都超過了結構化方法的極限。為解決這個問題,面向對象編程(object-oriented programming,OOP)新方法誕生了。面向對象的編程在這本書的后面詳細討論,但在這里給出一個簡短的定義:面向對象的編程是通過使用繼承性、封裝性和多態性來幫助組織復雜程序的編程方法。
總之,盡管C是世界上偉大的編程語言之一,但它處理復雜性的能力有限。一旦一個程序的代碼超過25 000~100 000行,就很難從總體上把握它的復雜性了。C++突破了這個限制,幫助程序員理解并且管理更大的程序。
1979年,當Bjarne Stroustrup在新澤西州的Murray Hill實驗室工作時,發明了C++。Stroustrup 最初把這種新語言稱為“帶類的C”。1983年,改名為C++。C++通過增加面向對象的特性擴充了C。因為C++產生在C的基礎之上,因此它包括了C所有的特征、屬性和優點。這是C++作為語言成功的一個關鍵原因。C++的發明不是企圖創造一種全新的編程語言,而是對一個已經高度成功的語言的改進。C++在1997年11月被標準化,目前的標準是ANSI/ISO。
三、Java出現的時機已經到來
在20世紀80年代末和90年代初,使用面向對象編程的C++語言占主導地位。的確,有一段時間程序員似乎都認為已經找到了一種完美的語言。因為C++有面向對象的特征,又有C語言高效和格式上的優點,因此它是一種可以被廣泛應用的編程語言。然而,就像過去一樣,推動計算機語言進化的力量正在醞釀。在隨后的幾年里,萬維網(WWW)和Internet達到臨界狀態。這個事件促成編程的另一場革命。
聊城網絡公司 提供