1-1.2 程式語言的分類(15/16)

Download Report

Transcript 1-1.2 程式語言的分類(15/16)

第一章 認識程式語言
1-1.認識程式語言
人與人之間的溝通必須要使用共通的語言(例如:國語、閩南語、
英語…等),而人想要與電腦溝通,則一樣必須要用電腦看得懂的語
言,即所謂的電腦程式語言(例如:Assemble、Basic、C、C++、
JAVA、Pascal、Delphi、Visual Basic、ASP語言及ASP.NET2.0、
VB2008、VC#2008等新一代的程式語言)。而這些程式語言都只是
「軟體」的一個子集合。
1-1.1 何謂軟體(1/3)
軟體(software)就是程式,它是由一連串的指令所組成,其主要功能就
是達成某一特定的目的。在電腦系統中軟體是用來控制硬體,如果只
有硬體而沒有軟體,則電腦被視為一堆廢鐵。因此,軟體與硬體缺一
不可。就像人一樣,身軀(硬體)與精神(軟體)也是缺一不可的。如圖11所示:
1-1.1 何謂軟體(2/3)
一般而言,軟體可分為兩大類分別為:「系統軟體」和「應用軟體」。
「系統軟體」用於控制電腦系統,例如作業系統軟體(MS-DOS、
Windows、UNIX及Vista),程式語言軟體(Visual C#、Visual C, C語言
及JAVA等)、以及工具程式(FTP,MSN,WINZIP等等)。「應用軟體」非
常廣泛,幾乎各行各業都可以用得上,如學校中的選課系統、成績處
理系統、人事薪資系統及企業中的生產管理、庫存管理、航空定位系
統等自行開發軟體。另有工具性應用軟體如WORD,EXCEL等等套裝軟
體,不勝枚舉。如圖1-2所示。
1-1.1 何謂軟體(3/3)
1-1.2 程式語言的分類(1/16)
一般而言,程式語言可分為兩大類:一為低階語言,另一為高階語言。而低階
語言又可分為機械語言與組合語言。高階語言則可分為程序導向語言與非程序
導向語言及自然語言。如圖1-3所示:
1-1.2 程式語言的分類(2/16)
由於電腦只看懂機械語言,因此,我們利用高階語言在撰寫程式之後,電腦並
無法直接的執行,必須要透過翻譯程式來翻譯為電腦可以接受的語言。一般而
言,從撰寫原始程式到執行時,必須要經過一連串的步驟,例如編譯、連結、
產生執行檔及執行結果。如圖1-4所示。
1-1.2 程式語言的分類(3/16)
執行步驟:原始程式編譯目的程式連結產生執行檔載入到記憶體
執行結果其說明如下所示:
(1)翻譯程式可分為三種:
直譯程式(Interpreter)
接受高階語言所寫之程式,並且在直譯之後就可以直接被執行。例如:BASIC
語言。
編譯程式(Compiler)
接受高階語言所寫之程式,將其轉換成可被機器接受之目的程式(目的
碼)。例如:C語言。
組譯程式(Assembler)
接受組合語言所寫之程式,將其轉換成可被機器接受之目的程式(目的碼)。例
如:Assembly語言。
1-1.2 程式語言的分類(4/16)
(2)連結程式(Linker)
使用者撰寫程式碼轉換(編譯或組譯)成目的程式之後,並不能馬上被執行,
因為使用者的程式可能需要連結其他的副程式或函式庫。因此,連結程式就是
負責把使用者的主程式或相關的庫存副程式連接起來,成為一個可執行的程式。
(3)載入程式(Loader)
將連結好的可執行程式,載入到主記憶體中,以便執行。
1-1.2 程式語言的分類(5/16)
在了解程式執行流程之後,接下來,我們再依照程式語言的特性進行分類:
第一代語言---機器語言(Machine languages)
這是一種比較接近電腦的語言,亦即電腦可以直接執行的機器碼,由於電
腦內部是使用0與1兩種狀態來表示資料及邏輯開關的控制,因此,我們將
電腦內部由 0與1所組成的資料稱之為「機器語言(machine languages)」。
也因為它是一種以0與1所構成二進位形式的碼,故並不適合人類閱讀與學
習,也不適合用來進行程式設計。如圖1-5所示:
1-1.2 程式語言的分類(6/16)
優點:
它是以邏輯狀態0和1直接命令電腦,不需翻譯就可以直接執行,所以速度最快。
缺點:
(1)不同的處理機(CPU),使用不同的機器語言,所以可攜性較差。
(2)只有兩種狀態0與1。因此,不僅難學、難懂、也不容易維護。
1-1.2 程式語言的分類(7/16)
2. 第二代語言---組合語言(Assembly languages)
這是一種介於高階語言與機器語言之間的語言,由於機器語言在使用上不方便,
因此,工程師們便從機器語言中找出規則,以英文字、數字符號來重組機器語
言,使它們變成較容易記憶的語言,這種語言便稱為「組合語言(Assembly
languages)」。
1-1.2 程式語言的分類(8/16)
它是利用特定功能的符號指令稱為助譯碼(Mnemonics code),例如:ADD代
表「相加」、LDA代表「載入」、MOV代表「搬移」;這些指令比起機器語
言來說會較有意義、容易學習,而負責翻譯的程式則稱之為組合程式
(Assembler)或組譯器。由於每一種計算機(電腦)皆有其獨特的機器語言,因此
每一種機器的組合語言各有不同。所以,可攜性(Portability)較差,並且較難撰
寫及維護,因此,一般使用者較少使用組合語言來設計程式。如圖1-6所示:
1-1.2 程式語言的分類(9/16)
3.第三代語言---程序導向語言(Procedure-Oriented Language)
這是一種類似自然語言,它較具有結構性,可以方便讓使用者撰寫程式。但是,
在撰寫完成之後必須要再經過編譯器(Compiler)或直譯器(Interpreter)轉換成
「機器語言」之才交給電腦執行。常見的編譯器有C、直譯器有BASIC均屬此
類。如圖1-7所示:
1-1.2 程式語言的分類(10/16)
4.第四代語言---非程序導向語言(NonProcedure-Oriented Language )
由於程序導向語言在開發專案時成本較高、維護不易及重覆使用性低的缺點。
因此,後來又發展出「非程序導向語言」,其設計上的優點就是,只要告訴電
腦”要做什麼(What to do)”,而不必告訴它”如何做(How to do)”。並且部份
的程式碼會自動產生(例如:ASP.NET 2.0),因此,可以大大的縮減專案開發
的時間,並且程式在維護上也更有效率。常見的非程序導向語言有下面兩種:
(1)結構化查詢語言(SQL)
(2)物件導向語言(Object-Oriented Programming,OOP)
1-1.2 程式語言的分類(11/16)
(1)結構化查詢語言(SQL)
比程序導向語言更容易使用的語言,使用者只需將步驟寫出來,而不必管電腦
要如何去執行,這樣的電腦語言稱為查詢語言(Query Language);這種語言減
輕了使用者程式設計的負擔,常見的是資料庫查詢語言如:SQL Server、
Oracle、Informix等。如圖1-8所示:
1-1.2 程式語言的分類(12/16)
1-1.2 程式語言的分類(13/16)
(2)物件導向語言(Object-Oriented Programming,OOP)
所謂物件導向程式語言(Object-Oriented Programming簡稱OOP),是把程
式設計的概念具體化、物件化,並以該物件的角度去分析和解決問題,它不但
突破了以往程序導向語言只能循序單向的設計缺失,更因物件的簡便、維護容
易及可重覆使用…等特性,而使得程式開發的速度加快,因此成為最新一代程
式語言的主流。常見的物件導向式語言有Visual BASIC 2005、Visual C++、
VB.NET、ASP.NET、Visual C#...等等。如圖1-9所示:
1-1.2 程式語言的分類(14/16)
1-1.2 程式語言的分類(15/16)
5. 第五代語言---自然語言(Natural languages)
就是我們日常所用的語言,如英文(English )、中文(Chinese)等,這是最接近
人類所使用的語言。由於此種語言文法和語意上較為複雜,因此在電腦處理上
較不容易,所以並不合適給予電腦處理,目前只用在人工智慧研究之一。如圖
1-10所示:
1-1.2 程式語言的分類(16/16)
1-1.3 高階語言的種類(1/5)
既然低階語言在學習上較為困難,因此,一般的學習者都是利用高階語言來開發系
統,而目前較常用的高階語言有下列數種。依發展的年代說明如下:
1.FORTRAN(FORmula TRANslator) 語言
FORTRAN是人們使用電腦的第一種高階語言,其數值計算特別強,主要用
於科學與工程應用。
2.COBOL 語言
COBOL為COmmon Business Oriented Language的縮寫,意為通用商業語言。
3.ALGOL(ALGOrighm Language) 語言
ALGOL為ALGOrithm Language的縮寫,意為演算法語言。其功能與FORTRAN
類似,較FORTRAN有效率,處理非數字能力較差。
1-1.3 高階語言的種類(2/5)
4.PL/1 語言
PL/1為Programming Language / 1 的縮寫。包含FORTRAN, ALGOL,
COBOL, Assembly的特點,為功能最強的語言。適用於商業及工程科學。
5.BASIC 語言
BASIC是Beginners All purpose Symbolic Instruction Code的縮寫,
意為初學者通用符號指令碼。早期的BASIC缺乏結構化,因此不如其他語言
有威力。今天的BASIC已經改善,並增加模組的功能。目前流行的BASIC有
PC-BASIC,Turbo-BASIC,QBASIC,Quick BASIC,Visual Basic(VB)
等,其中以VB最被看好。
6.PASCAL 語言
PASCAL語言它是一種結構良好的程式語言,具有動態性的資料型態、遞迴
性副程式功能、具有集合型態、及區域性結構等特性。它是最結構化的語言。
1-1.3 高階語言的種類(3/5)
7.C 語言
C語言於西元1972年美國貝爾實驗室所創,它具有高階語言的優點,並有
低階語言的效率。它具結構化、執行速度快、可攜性高,可在多種不同機
器上執行,適合用來設計作業系統及開發應用軟體。它可執行於MS-DOS、
Windows、UNIX等作業系統,小從個人電腦大至超級電腦,C語言程式均
能執行,最適合用來做為教學用的程式語言。它隨著未來32位元個人電腦
的作業系統,將日漸流行。
8.C++
C語言的物件導向版本,主要用於設計Windows應用軟體。
9.JAVA
程式架構像C++,但是它拿掉了C++最困難的指標部份,它能發揮網路及多
媒體的內建支援,其主要用於設計網際網路上執行的程式語言。
1-1.3 高階語言的種類(4/5)
10.RPG(Report Program Generator)
表格化的程式語言,主要作報表印出之用。
11.LISP與PROLOG
AI人工智慧語言,具有遞迴特性的語言,為一非程序式的語言。
12.ADA
美國國防部發展的語言。
13.LOGO
具有遞迴特性的語言,小孩子用來學習繪圖的語言。例如:CAI電腦輔助軟體。
1-1.3 高階語言的種類(5/5)
14.APL
為一種有效率的互動式程式語言,應用於解決數學上問題的語言。
15.FORTH
符式語言,後序式語言,執行速度最快。
16.SNOBOL
應用於非數字(字串)資料處理。
17.HTML
為Hyper Text Markup Language超文字標示語言的縮寫,特點是具有超連結
的功能,主要用於設計HomePage。
1-1.4 演算法(Algorithm) (1/5)
所謂演算法 (Algorithm)就是解決問題的方法,它是利用文字敘述或圖形或虛
擬碼的方式,來表示解決問題的步驟。我們在撰寫演算法時,必須要正確並且
精簡的描述次序,不可以順序顛倒或加入一些不必要的敘述。因此,我們最好
在撰寫時應該以較少的步驟來解決問題,不但可以大大的減少電腦執行所需的
時間。
1-1.4 演算法(Algorithm) (2/5)
一、撰寫演算法應遵守以下五點原則:
1.輸入:不一定要有輸入。
2.輸出:至少一個輸出。
3.確定性:指令必須明確,不可模稜兩可。
4.有限性:演算法不能有無窮迴路,必須能終止執行。
5.有效性:演算法必須簡單到一張紙、一支筆即可追蹤出其執行結果。
1-1.4 演算法(Algorithm) (3/5)
二、描述演算法有下列三種方法:
(一)文字敘述
演算法可用文字加以描述,但採用口語化文字加以描述的缺點在於冗長且
較不精確,在撰寫、閱讀、會意時可能會有誤差,因此一般較不常用。
(二)流程圖
『流程圖』是將解決問題的步驟用圖形加以描述,可協助程式設計者設計出
周詳的程式,可增加程式的可讀性,對於初學者而言可幫助奠定良好的程式設
計基礎,例如:1+2+3+…+10的流程圖。如圖1-11所示。此種方法在以往很流
行,但其缺點是,只能表達細部邏輯,較難表示整個程式的結構,所以最近也
採用『虛擬碼』來輔助。
1-1.4 演算法(Algorithm) (4/5)
1-1.4 演算法(Algorithm)(5/5)
(三)虛擬碼
虛擬碼兼具文字描述及流程圖的優點,其方式是用文字摻雜程式語言,來
描述解題步驟與方法。例如:1+2+3+…+10虛擬碼可以描述如下:
(1)設Count=1,Total=0;
(2)TotalTotal+Count;
(3)CountCount+1;
(4)若Count > 10 則至步驟(5),否則回步驟(2)
(5)印出Total
1-1.5 撰寫程式的步驟(1/3)
一般在撰寫程式時,程式設計師都會遵照下列步驟執行:
1-1.5 撰寫程式的步驟(2/3)
1-1.5 撰寫程式的步驟(3/3)
1-1.6我們為什麼要寫程式呢?
我們為什麼要花那麼多時間來撰寫程式呢?其主要的目的:它可以快速解決
「複雜的問題」。為什麼呢?我們可以從下面的概念圖來說明,如圖1-13所示:
甲同學:請電腦幫我計算1加到10的總合。
或許你會認為這簡單的問題,你我都會算,何必寫程式呢?
但是,當甲同學:如果又說請電腦幫我計算1加到50000時,我想我們就無法
馬上計算出結果。由上面的例子,我們可以非常清楚的得知,程式語言幫忙人
類解決複雜的問題。
1-2 .NET Framework簡介
1-2.1 .NET Framework 的架構
1-2.2 共通語言規範
在Visual Studio 2005的.NET Framework平台中,它大約可以相容25種不同
的程式語言,例如:VB2005, C#,J#,C++等。而程式設計師不要需要學會每一
種程式語言,只要學會其中一種語言即可,並遵守共通語言規範的情況下,每
一種程式語言都可以相互轉換為與平台無關的中介語言(MSIL)。其最主要的目
的就是不同的程式語言可以相互使用所須要的資源,而不會有轉換上的問題。
1-2.3 共通語言執行環境(1/2)
「Runtime」指的是電腦在編譯某種程式語言的執行時期。而只要以程式語言
撰寫出來的程式,就必須要Runtime來執行,而且不同的程式語言所使用的
Runtime也不相同。因為Runtime提供了程式語言所必須配備的函式與物件,
而各種語言的函式與物件都不盡相同,所以各種語言都有著自己的Runtime,
無法共用。
1-2.3 共通語言執行環境(2/2)
但是.NET Framework以共通語言執行環境(CLR)來解決了這個共用問題,
IL(Intermediate Language)這個中介語言(介於程式碼與機器碼之間的語言,
包含物件載入、方法呼叫、流程控制、邏輯運算等多項基本指令),即為程式
所轉換而來的。不論程式是以那種程式語言所撰寫的,亦能轉譯為相同的IL中
介語言,但CPU(中央處理器)並無法直接接受IL中介語言的指令,必須經過
再次編譯,才能成為CPU真正看得懂的機器碼,而轉任轉譯角色的工作者就是
JIT(Just in Time)編譯器了,JIT編譯器能夠很快地將IL中介語言轉譯成機器
碼,這也是它的特點之一。
1-2.4 基礎類別庫(1/2)
不同的程式語言有自己的「Runtime」,而物件類別資料庫也是一樣。各
種語言所用的物件類別標準不一,「基礎類別庫」提供了所有.NET程式語言
的應用物件,將各種語言的物件類別作整合,建立一個所有語言都可共用的物
件類別資料庫,例如繪圖、多媒體、郵件管理等物件類別。
各種語言有自己的優點,您可以截長補短,發揮各語言的長處,反正我們
不必擔心語言之間的相容問題。.NET Framework可以說已經把各種語言作了
統一與整合的處理,程式設計師也能在短時間內發展出大規模的網路服務系統,
這在增加產量與提高效率方面都有相當大的幫助。.NET Framework類別函式
庫-專案預設匯入的名稱空間如下所示:
1-2.4 基礎類別庫(2/2)