1-1.2 程式語言的分類

Download Report

Transcript 1-1.2 程式語言的分類

第一章
認識程式語言
本章學習目標
1. 讓讀者瞭解軟體與程式語言的關係。
2. 認識視覺化「Visual」程式語言的優
點及特性。
本章內容
1-1. 認識程式語言
1-2 .NET Framework簡介
1-3 C語言與VC#
1-4 VC++和VC#
1-5 主控台應用程式
1-6 Windows應用程式
1-7 程式碼片斷管理員
前言


目前C#(唸為C Sharp)已經推出Visual C#
2010 中 文 版 。 「 Visual 」 的 中 文 意 思 是
「視覺化」,它是在建立輸出入介面時,
不必撰寫程式來描述介面元件的外觀和配
置,只要使用工具箱的工具,在程式設計
階段便可達成,是屬於一種「What you
see is what you get ;WYSIWYG」直覺式
設計觀念。
簡單來說,當設計階段所看到的畫面幾乎
就是執行時所看到的畫面。
1-1.認識程式語言


人與人間溝通必須要使用共通語言(例如:
國語、閩南語、英語…等),而人想要與
電腦溝通,則一樣必須要用電腦看得懂的
語言,即所謂電腦程式語言
電腦程式語言,例如:Assemble、Basic、
C 、 C++ 、 JAVA 、 Pascal 、 Delphi 、
Visual Basic 、 ASP 語 言 及 ASP.NET3.5 、
VB2008、VC#2008、VB2010、VC#2010
等新一代的程式語言。這些程式語言都只
是「軟體」的一個子集合。
1-1.1 何謂軟體(1/3)
• 軟體(software)就是程式,它是由一連串指令所組成,其主
要功能就是達成某一特定目的。
• 在電腦系統中軟體是用來控制硬體,如果只有硬體而沒有
軟體,則電腦被視為一堆廢鐵。因此軟體與硬體缺一不可。
就像人一樣,身軀(硬體)與精神(軟體)也是缺一不可的。如
圖1-1所示:
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)
一般而言,程式語言可分為兩大類:一為低階語言,另一為高
階語言。而低階語言又可分為機械語言與組合語言。高階語言
則可分為程序導向語言與非程序導向語言及自然語言。如圖13所示:
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 2008、
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有PCBASIC , 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. 8.C++: C語言的物件導向版本,主要用於設計Windows應
用軟體。
9. 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虛擬碼可以
描述如下:





設Count=1,Total=0;
TotalTotal+Count;
CountCount+1;
若Count > 10 則至步驟(5),否則回步驟(2)
印出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 2008的.NET Framework平台中,
它 大 約 可 以 相 容 25 種 不 同 程 式 語 言 , 例 如 :
VB2008, 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)
1-3 C語言與VC# (1/2)
一.C語言所使用的「程序導向」是以「功能」
需求為主,程式只要能達到所要求功能即
可。因此在模組化過程中,是以功能做為
分解題目的依據,最後再將這些功能模組
合併。
二.VC#所使用的「物件導向」是以「物件
(資料)」為主,先觀察這些物件有何特性、
如何操作,以及物件和物件之間的關連性,
然後才開始撰寫各個物件模組,最後再將
這些物件模組組合成一個系統。
1-3 C語言與VC# (2/2)
最大分別是, C語言不是物件導向程式。而
VC#2008才是真正物件導向程式的語言。
一個真正物件導向語言,必須要具備以下的特性:
1.
2.
3.
4.
抽象化(Abstraction)
封裝性(Encapsulation)
繼承性(Inheritance)
多形性(Polymorphism)
但是C語言都沒有具備以上的這些特性。而
VC#2008則都則備了。
詳細介紹,請參考第九章物件導向程式設計。
1-4 VC++ 和 VC# (1/2)
1-4 VC++ 和 VC# (2/2)
1-5 主控台應用程式(1/8)


主控台應用程式(Console Application)是VC#2008中
最簡單的一種應用程式,其輸出環境類似DOS,大都以
純文字介面來顯示,因為它是以命令列輸入方式為主。
其優點就是程式較為簡潔並且執行速度較快,但缺點就
是無法提供有親和力的使用者介面。因此不建議一般初
學者使用此方法來撰寫程式。
主控台應用程式就是利用模組(Module)來完成,其原
理為由一個Main( )的主程序,其中包含所關相關程式
碼。而可利用Console物件所提供的方法和屬性來處理,
而在模式中也可包含其他的副程式或函數,並且不需要
由屬性視窗去設定任何的屬性資料。
1-5 主控台應用程式(2/8)
1-5 主控台應用程式(3/8)
1-5 主控台應用程式(4/8)
1-5 主控台應用程式(5/8)
1-5 主控台應用程式(6/8)
1-5 主控台應用程式(7/8)
1-5 主控台應用程式(8/8)
1-6 Windows應用程式(1/4)

雖然可以利用主控台(Console)應用程式下來
設計Windows表單輸出入介面,但這對於初
學者而言,是一件較不易學習之事。因此若能
在「Windows 應用程式)模式下,使用Visual
C# 2008的整合開發環境(IDE),利用工具箱
所提供的工具,如此可讓設計者不需要撰寫任
何的程式碼便很輕易地製作出所需要的輸出入
介面,如按鈕、文字方塊…等控制項,因此程
式設計者就只要將時間專注於了解使用者的需
求及撰寫程式流程的核心,不但節省設計輸出
入畫面的時間而且很容易維護。
1-6 Windows應用程式(2/4)


為什麼傳統的程式語言,如C語言,後來漸
漸被Visual C# 所取代呢?其最主要的原因
就是它們都沒有提供「視覺化」的功能。
何謂「視覺化(Visual)」呢?就是程式開發
的環境可以讓程式設計者利用圖形化方式
設計程式,並且開發完成的套裝軟體,也
可以讓使用利用圖形化物件,亦即所謂的
「 所 見 即 所 得 (What You See Is What
You Get, WYSIWYG)」的概念。其說明如
下所示:
1-6 Windows應用程式(3/4)
1-6 Windows應用程式(4/4)
1-6.1 如何啟動VC#2008 (1/3)
1-6.1 如何啟動VC#2008 (2/3)
1-6.1 如何啟動VC#2008 (3/3)
1-6.2撰寫第一個VC#2008程式(1/3)
1-6.2撰寫第一個VC#2008程式(2/3)
1-6.2撰寫第一個VC#2008程式(3/3)
註:執行VC#2008程式的方式有三種:
 執行【偵錯/開始偵錯】指令
 直接按「一般工具列」上的「開始偵錯」
鈕
 直接按「快速鍵」「F5」
1-7. 程式碼片斷管理員 (1/4)
在VC#2008中內建了非常多程式碼片段,稱
為IntelliSense程式碼片段。而每一個程式碼片
段都會執行完整的程式設計工作,設計者可以
善加利用這些IntelliSense程式碼片段,如此,
可以加快程式設計的開發時程。
 加入程式碼片段的方法:
在程式碼視窗中加入程式碼片段的位置,按右鍵,
此時會出現快速功能表,請選擇你所須的功能,
一層一層的往下找到你所須的程式碼片段,最後
快按二下即可插入此程式碼片段了。

1-7. 程式碼片斷管理員 (2/4)
1-7. 程式碼片斷管理員 (2/4)
1-7. 程式碼片斷管理員 (3/4)
1-7. 程式碼片斷管理員 (4/4)