1.5 個人計算、分佈式計算與客户/服務器計算

1977年,Apple計算機公司使個人計算(personal computer)得以普及。最初,擁有一台計算機只是愛好者的夢想,隨着它的價格不斷降低,人們可以購買供個人或辦公使用的計算機。1981年,世界上最大的計算機廣家IBM公司推出了IBM個人計算機(IBM Personal computer)。一夜之間,個人計算機遍佈公司、企業和政府機關。

然而這些計算機只是“獨立”的個體,各自做自己的工作,要通過磁盤複製來共享信息(通常稱為暗聯網)。儘管早期個人計算機不夠強大,不能同時服務於多個用户,但這些機器可以鏈接在計算機網絡中,可以接入組織內的局域網(Local area Network,LAN),還可以通過單位內部的電話線完成鏈接。這樣就在組成化計算中出現了分佈式計算(distributed computing)結構,其處理不是在某個中央計算機上進行,而是由分佈於網絡中的機器完成。個人計算機已經足夠強大,能夠處理個人用户的計算要求並處理電子信息傳遞等基本通信任務。

如今,最強大的個人計算機已經可以和十年前幾百萬美元的機器相媲美。最強大的台式計算機(稱為工作站,workstation)對個人用户提供了大量的功能。在網絡上.有些計算機向遍佈整個網絡的客户提供數據存取服務,這些計算機稱為文件服務器(file server)。通過這種方式.在網絡上共享信息很容易,因而產生了客户—服務器結構o C和C++已經成為編寫操作系統、計算機網絡和分佈式客户/服務器應用程序軟件的首選編程語言。如今最常見的操作系統如UNIX、Microsoft的基於windows系統和IBM的os/2都提供了本節介紹的功能。

1.6 機器語言、彙編語言和高級語言

程序員用各種編程語言編寫指令,有些是計算機直接理解的,有些則需要中間翻譯(tranlation)的步驟。如今使用的計算機語言有幾百種,可以分為三大類:

1.機器語言
 2.彙編語言
 3.高級語言

任何計算機只能直接理解本身酌機器語言(machine language)。機器語言是特定計算機的自然語言,由計算機的硬件設計定義。機器語言通常由一系列數字組成(最終簡化0和1),讓計算機一次一個地執行最基本的操作。機器語言非常繁瑣,下面的機器語言程序將工齡工資和基礎工資相加,並把結果保存在工資總額中:

+1300042774
+1400593419
+1200274027

隨着計算機越來越普及,機器語言編程對大多數程序員顯然太慢、太繁瑣。程序員不用計算機直接理解的一系列數字,而是用類似英文縮寫的助記將來表示計算機的基本操作,這些助記符構成了彙編語言(assembly language)。稱為彙編器(assembler)的翻譯程序以計算機的速度將彙編語言程序轉換為機器語言。下列彙編程序也是工齡工資和基礎工資相加,並將結果保存在總工資中,但要比相應的機器語言清晰得多:

LOAD BASEPAY
 ADD OVERPAY
 STORE GROSSPAY

儘管這種代碼對於人們一目瞭然,但計算機卻無法理解,必須先翻譯為相應的機器語言。

隨着彙編語言的出現,計算機的使用迅速增加,然而即使是最簡單的任務.也需要許多條指令才能完成。為了加速編程過程,人們開發了高級語言(high-level language),用一條語句完成大量任務。稱為編譯器(compiler)的翻譯程序將高級語言程序變為相應的機器語言。高級語言使程序員能夠編寫更像英語的指令,可以包含常用的數學符號。將工齡工資和基礎工資相加.並把結果保存在總工資中,可以用下列高級語言程序:

grossPay = basePay + overTimePay

顯然,從程序員角度看,高級語言比機器語言和彙編語言都要強得多。 C和C++是最強大最廣泛使用的高級語言。

將高級語言程序編譯為相應的機器語言的過程可能需要大量時間。解釋器(interpreter)程序可以直接執行高級語言程序,而不必先將這些程序編譯成相應的機器語言。儘管編譯程序的執行速度比解釋程序更快,但解釋器在程序開發環境中更常用,因為增加新特性和糾正錯誤時經常需要重

新編譯程序。一旦程序開發完成,編譯版本的運行最有效。

 

1.7 C語言與C++的歷史

C++是從C語言演變而來的,而C語言又是從兩個編程語言BCPL和B演變而來的、BCPL是Martin Richards於1967年開發的,用於編寫操作系統軟件和編譯器。Ken Thompson在他的B語言(1970年在貝爾實驗室)。DCPL和B都是“無類型”語言,每個數據項在內存中佔一個“字”(word)長、如果要將數據項作為整數或實數處理,編程的工作量會很大。

C語言是從D語言演變而成的,由貝爾實驗室的Dennis Ritchie開發,最初於1972年在DEC PDP—11計算機上實現。C語言使用了BCPL和B的許多重要概念,同時增加了數據類型和其他特性。C語言最初作為UNIX操作系統的開發語言而聞名於世。如今,大多數操作系統都是用C/C++寫成的。二十多年來,C語言已經遍佈在大多數計算機上。C語言是硬件無關的,只要仔細設計。就可以編寫能移植列大多數計算機上的C語言程序。

到20世紀70年代未期,C語言演變成現在所謂的“傳統C”、“經典CPP或“Kernighan/RitchieC"。1978年Prentice Hall公司出版了Kernighan和Ritchie合作的著作《The CProgrmmming Language》,引起了人們對C語言的廣泛關注(見參考文獻Ke78)。

C語言在各種不同類型計算機(有時稱為硬件平台)上的普及導致了許多變形。它們雖然相似,但通常互不兼容。對需要為不同平台編寫可移植程序的開發人員.這是個嚴重問題,顯然需要有個標準的C語言版本。1983年,美國國家計算機與信息處理標準委員會(x3)成立了x3JII技術分會,目的是提供無歧義性且與機器無關的語言定義。1989年推出了這種語言標準。AN5I與國際標準化組織(IS0)合作.在全球範圍內將C語言標淮化,1990年推出了聯合標準文檔.稱為ANSI/IS09899:1990。這個文檔可以從ANSI獲得副本。1988年推出的Kernighan 和Ritchie著作的第二版體現了該版本(稱為ANSI C),這也是目前全世界使用的版本(見參考文獻Ke88)o

可移植性提示1.1

由於c語言是標準化、硬件無關、廣為使用的語言,因此用C語言編寫的應用程序通常只要稍作修改或不經修改即可在多種不同的計算機系統中運行。

C++是C語言的擴展,是20世紀80年代初由貝爾實驗室的Bjarne stroustrup開發的。C++的許多特性是從c語言中派生的,但更重要的是,它提供了面向對象編程(object-oriented programming)的功能。

軟件業正在醖釀一場革命,最終日標是更快、更正確、更經濟地建立軟件,新的、更強大的軟件需求迫在眉睫。對象(object)實際上是模擬實際項目的可複用軟件組件(component)。軟件開發人員發現,利用模塊化、面t向對象的設計和實現方法與過去結構化編程方法相比較,可以使軟件開發小組的生產率更高。面向對象編程的優勢在於更容易理解、糾正和修改。

許多面向對象的語言也紛紛涌現,包括最著名的由Xerox的Palo Alto研究中心(PARC)開發的small talk。Smalltalk是純粹的面向對象的語言,其所有的編程元素都是“對象”。C++則是一種“混合型語言“,可以用C語言方式、面向對象方式或兼用兩種方式進行編程。1.9節將介紹基於C/C++的新語言——Java。