天天看點

《Java和Android開發實戰詳解》——1.1節程式設計語言基礎知識

本節書摘來自異步社群《java和android開發實戰詳解》一書中的第1章,第1.1節程式設計語言基礎知識,作者 陳會安,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

1.1程式設計語言基礎知識

java和android開發實戰詳解

“程式設計語言”(programming language)是人類告訴計算機如何工作的一款語言,如同人與人之間溝通使用自然語言,程式設計語言被設計用于人類與計算機之間進行溝通。從技術角度來說,程式設計語言就是一款将執行指令傳達給計算機的标準通信技術。

1.1.1 程式、軟體與應用程式

在說明程式設計語言之前,我們需要了解什麼是程式、軟體與應用程式。簡單地說來,程式設計語言提供了文法,可以讓我們編寫程式代碼來建立程式,程式經編譯建立成應用程式後,就可以歸類成不同軟體。

1.程式

“程式”(program)是使用指定程式設計語言所編寫的特殊符号的組合,這些符号組成指令和語句,再進一步編寫成程式代碼,程式代碼可以告訴計算機解決指定問題的步驟。

簡單地說,程式就像是一個轉換器,當從計算機鍵盤或滑鼠取得輸入資料後,程式就可以将資料轉換成有用的資訊,如圖1-1所示。

《Java和Android開發實戰詳解》——1.1節程式設計語言基礎知識

如圖1-1所示的輸出結果可能顯示在螢幕或是從列印機列印出來,計算機隻是按照程式的指令将輸入資料進行轉換,并産生所需的輸出結果。換句話說,為了讓計算機能夠看懂程式,程式需要根據程式設計語言的規則、結構和文法,以指定文字或符号來編寫程式,例如,使用java程式設計語言編寫的程式稱為java程式代碼(java code),或稱為“源代碼”(source code)。

程式設計語言與人類使用的自然語言的最大不同,在于我們平常使用的語言并不要求十分精确,就算有一些小錯誤也一樣可以猜測其意義。但是計算機就沒有這麼聰明,一定要嚴格遵照程式設計語言規則來編寫程式,否則計算機執行程式就會産生錯誤。

2.軟體與應用程式

“應用程式”(application)是一款處理指定工作的計算機程式,例如,數學計算分析、文字處理、電子表格工具以及程式設計語言的內建開發工具等。“軟體”(software)是在計算機執行的應用程式或者作業系統的泛稱,通常軟體可以是一款或多款程式或整套應用程式的泛稱。

1.1.2 程式設計語言的種類

随着計算機科技的進步,程式設計語言已經發展成一個龐大的族群。在程式設計語言的分類上,按照其發展時代來區分可以分為五代,如表1-1所示。

《Java和Android開發實戰詳解》——1.1節程式設計語言基礎知識

所謂第四代語言是特定應用程式專用的程式設計語言,例如,用于資料庫查詢的sql語言。第五代程式設計語言主要是使用在人工智能和專家系統的邏輯分析語言,也稱為“自然語言”(natural languages)。

1.1.3 低級語言

如果按照與程式編寫者的親和度來區分,程式設計語言可以分為偏向計算機的低級語言和編寫者容易了解的進階程式設計語言。

低級語言(low level language)是一款面向計算機不容易了解的程式設計語言。簡單地說,它是計算機看得懂的程式設計語言。是以執行效率高,但是使用者并不易學習。低級語言主要有兩款:機器語言和彙編語言。

1.機器語言(machine language)

機器語言使用二進制的0和1來表示程式代碼,計算機可以直接執行機器語言的程式代碼,是以執行效率最高,如下所示:

2.彙編語言(assembly language)

彙編語言使用一些由簡單符号組成的指令集來代表機器語言0和1表示的二進制程式代碼。其建立的程式代碼隻需使用“彙程式設計式”(assembler)就可以轉換成機器語言,然後在計算機上執行。彙編語言是一款十分接近機器語言的程式設計語言,如下所示:

1.1.4 進階語言

進階語言(high level languages)是一種接近人類語言的程式設計語言,或稱為半英文(half-english)程式設計語言。因為計算機不能馬上看懂,是以需要進一步翻譯轉換成機器語言,其轉換的程式代碼通常比直接使用機器語言編寫的代碼冗長,是以效率較低,但是非常适合使用者學習。

目前常見的進階語言有:basic、c/c++、c#、java、fortran、cobol和pascal等。進階語言需要進行翻譯,将程式代碼轉譯成機器語言的執行檔案後,才能在計算機上執行,翻譯方式有兩款:使用編譯程式和使用解釋程式。

1.編譯程式(compiler)

c/c++等程式設計語言屬于編譯型語言,編譯程式需要檢查完整個程式檔案的代碼,在完全沒有錯誤的情況下,才會翻譯成機器語言的程式檔案。其主要功能有兩項,具體如下所示。

檢查程式錯誤。

将程式翻譯成機器語言的程式檔案。

2.解釋程式(interpreter)

早期basic語言(例如basica、quickbasic等)和目前網頁技術常見的“腳本”(scripts)語言,例如vbscript和javascript,都屬于解釋型語言。解釋程式在處理程式代碼時,并不會輸出可執行檔案,而是直接一個指令一個動作,一行一行地執行程式代碼,其執行效率相對較低,但是非常便于系統開發階段的程式調試。

1.1.5 程式是如何執行的

程式在計算機實際執行的過程對于進階程式設計語言來說并非十分重要。不過,對計算機執行程式有一定的認識,在程式設計時仍然有一定的幫助。

不論我們是使用進階或低級程式設計語言來編寫程式,所編寫的程式代碼最後都會編譯成計算機看得懂的機器語言,這些指令是cpu支援的“指令集”(instruction set)。

因為各計算機使用的cpu不同,其支援的指令集也不相同。但要認識到,雖然進階語言有很多種,但是cpu隻懂一種語言,也就是其能執行的機器語言,如圖1-2所示。

圖1-2所示為計算機的基本結構,其中cpu使用總線來連接配接周邊裝置,在圖1-2隻繪出主存儲器。cpu執行機器語言程式是一種例行工作,過程隻是依次将存儲在記憶體的機器語言指令“取出和執行”(fetch-and-execute)。簡單地說,cpu從記憶體中通路出指令,然後執行此指令;取出下一個指令,再執行它。現在我們可以來簡單了解程式執行的步驟,具體如下所示。

在計算機主存儲器存儲機器語言的程式代碼和資料。

由cpu從記憶體依次取出一個個機器語言指令,然後執行它。當然,cpu并非真正了解機器語言在做什麼,這隻是它的例行工作——依次執行機器語言指令,是以使用者設計的程式不能有錯誤,因為cpu實在沒有聰明到能夠替您的程式糾錯。

《Java和Android開發實戰詳解》——1.1節程式設計語言基礎知識

1.中央處理器

中央處理器(cpu)是計算機實際提供運算功能的元件,目前的個人計算機都是使用單晶片內建電路(integrated circuit,ic)來作為處理器的,其主要功能是使用“alu”(arithmetic and logic unit,算術邏輯單元)中的邏輯電路進行運算,執行機器語言的指令。

在cpu擁有很多組“寄存器”(registers),寄存器是位于cpu内部的記憶體,可以暫時存儲資料或機器語言指令,例如,執行加法指令需要兩個操作數,運算時這兩個操作數資料就存儲在寄存器。

cpu中擁有一些控制“取出和執行”(fetch-and-execute)用途的寄存器,其說明如表1-2所示。

《Java和Android開發實戰詳解》——1.1節程式設計語言基礎知識

現在我們可以進一步檢視“取出和執行”(fetch-and-execute)過程,cpu的執行速度是依據clock産生的頻率,即以mhz為機關的速度來執行存儲在ir的機器語言指令。在執行後,以ic寄存器存儲的位址,通過mdr和mar寄存器從總線取得記憶體的下一個指令,然後執行指令,重複上述操作即可執行完整個應用程式。

2.記憶體

當我們執行程式時,作業系統可以将存儲在硬碟或軟碟的執行檔案加載計算機主存儲器(main memory)上,cpu可以從記憶體依次加載指令并執行。

事實上,我們編寫的程式代碼本身和使用的資料都存儲在ram(random access memory)中,每一個存儲機關有數字編号,稱為“位址”(address)。如同大樓裡的信箱,門牌号碼是位址,信箱内容是程式代碼或資料,存儲資料占用的記憶體空間大小,需根據使用的資料類型而定。

計算機cpu通路記憶體資料的主要步驟,如下所示。

step01送出讀寫的記憶體位址:當cpu讀取程式代碼或資料時,需要送出欲取得的記憶體位址,例如,記憶體位址4。

step02讀寫記憶體存儲的資料:cpu可以從指定位址讀取記憶體内容,例如,位址4中的内容是01010101,這是一個二進制值,每一個0或1是一個“位”(bit),8個位稱為“位元組”(byte),這是計算機記憶體的最小存儲機關。

每次cpu從記憶體讀取的資料量,需根據cpu與記憶體間的“總線”(bus)而定,在購買計算機時,常聽到所謂32位或64位的cpu,就是指cpu每次可以讀取4個位元組或8個位元組資料來進行運算。當然每次cpu可以讀取越多的資料量,cpu的執行效率也越高。

3.輸入/輸出裝置

計算機的輸入/輸出裝置(input/output devices)是程式的視窗,可以讓使用者輸入資料和顯示程式的執行結果。目前而言,計算機最常用的輸入裝置是鍵盤和滑鼠;輸出裝置是螢幕和列印機。

當人們在“記事本”使用鍵盤輸入英文字母和數字時,螢幕馬上顯示對應的英文或中文字。

但對于計算機來說,當使用者在鍵盤按下大寫a字母時,傳給計算機的是1個一位元組寬的數字(英文字母和數字隻使用其中的7位)。目前個人計算機主要是使用“ascii”(american standard code for information interchange)碼來表示字元,例如,大寫a對應的ascii碼是65,換句話說,計算機實際顯示和存儲的資料是數值65。

同樣的,在螢幕上顯示的中文字,我們看到的是中文字,計算機看到的仍然是内碼。因為中文字很多,需要使用2個位元組的數值來代表常用的中文字,繁體中文的内碼是big 5,簡體中文有gb和hz。也就是說,1個中文字的内碼值占用兩個位元組,相當于兩個英文字母。

目前windows作業系統也支援unicode,它是由unicode consortium組織所制定的一個能包括全世界文字的内碼集,包含gb2312和big5的所有内碼集,即iso 10646内碼集。有兩種常用的編碼方式:utf-8,為8位編碼;utf-16,為16位的編碼。

4.二級儲存設備

二級儲存設備(secondary storage unit)是一種能夠長時間和提供高容量存儲資料的裝置。計算機程式與資料是在加載到記憶體後,才依次讓cpu來執行,不過,在此之前這些程式與資料存儲在二級儲存設備,例如硬碟驅動器。

當我們在windows作業系統使用“記事本”編輯java程式代碼時,這些資料隻會暫時存儲在計算機的主存儲器,因為主存儲器在關閉電源後,其存儲的資料就會消失,為了長時間存儲這些資料,我們需要使用二級儲存設備,比如将資料存儲到硬碟。

在二級儲存設備的程式代碼檔案可以長時間存儲,當我們需要編譯和執行程式時,再将檔案内容加載主存儲器。基本上,硬碟是最常用的二級儲存設備,此外,cd和dvd光驅也是計算機常用的二級儲存設備。

繼續閱讀