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