Firefox Python 程序员 google nginx 云计算 apache 开源 shell Windows linux java wordpress 编程 centos Android mysql Ubuntu 微软 php

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

1.1編程語言基礎知識
JAVA和Android開發實戰詳解
“編程語言”(Programming Language)是人類告訴計算機如何工作的一款語言,如同人與人之間溝通使用自然語言,編程語言被設計用於人類與計算機之間進行溝通。從技術角度來說,編程語言就是一款將執行指令傳達給計算機的標準通信技術。

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

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

簡單地說,程序就像是一個轉換器,當從計算機鍵盤或鼠標取得輸入數據後,程序就可以將數據轉換成有用的信息,如圖1-1所示。

 


68385e5f8b68078d423701e8a0b583174cb1c26b

如圖1-1所示的輸出結果可能顯示在屏幕或是從打印機打印出來,計算機只是按照程序的指令將輸入數據進行轉換,並產生所需的輸出結果。換句話說,為了讓計算機能夠看懂程序,程序需要根據編程語言的規則、結構和語法,以指定文字或符號來編寫程序,例如,使用Java編程語言編寫的程序稱為Java程序代碼(Java Code),或稱為“源代碼”(Source Code)。

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

2.軟件與應用程序
“應用程序”(Application)是一款處理指定工作的計算機程序,例如,數學計算分析、文字處理、電子表格工具以及編程語言的集成開發工具等。“軟件”(Software)是在計算機執行的應用程序或者操作系統的泛稱,通常軟件可以是一款或多款程序或整套應用程序的泛稱。

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


64632de258e322e412bbabf02f7c6873359a6260

所謂第四代語言是特定應用程序專用的編程語言,例如,用於數據庫查詢的SQL語言。第五代編程語言主要是使用在人工智能和專家系統的邏輯分析語言,也稱為“自然語言”(Natural Languages)。

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

低級語言(Low Level Language)是一款面向計算機不容易了解的編程語言。簡單地說,它是計算機看得懂的編程語言。所以執行效率高,但是用戶並不易學習。低級語言主要有兩款:機器語言和匯編語言。

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

0111 0001 0000 1111
1001 1101 1011 0001
2.匯編語言(Assembly Language)
匯編語言使用一些由簡單符號組成的指令集來代表機器語言0和1表示的二進制程序代碼。其建立的程序代碼只需使用“匯編程序”(Assembler)就可以轉換成機器語言,然後在計算機上執行。匯編語言是一款十分接近機器語言的編程語言,如下所示:

MOV AX 01
MOV BX 02
ADD AX BX
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實在沒有聰明到能夠替您的程序糾錯。

 


4b42189dafde211e71f1ca3ab19b86c8ecb95527

1.中央處理器
中央處理器(CPU)是計算機實際提供運算功能的組件,目前的個人計算機都是使用單芯片集成電路(Integrated Circuit,IC)來作為處理器的,其主要功能是使用“ALU”(Arithmetic and Logic Unit,算術邏輯單元)中的邏輯電路進行運算,執行機器語言的指令。

在CPU擁有很多組“寄存器”(Registers),寄存器是位於CPU內部的內存,可以暫時存儲數據或機器語言指令,例如,執行加法指令需要兩個操作數,運算時這兩個操作數數據就存儲在寄存器。

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

 


6c72c794924c0f5d0fd6bcd460b167d7c83e4636

現在我們可以進一步查看“取出和執行”(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光驅也是計算機常用的二級存儲設備。

延伸阅读

    评论