Presentation is loading. Please wait.

Presentation is loading. Please wait.

第 13 章 程式語言.

Similar presentations


Presentation on theme: "第 13 章 程式語言."— Presentation transcript:

1 第 13 章 程式語言

2 學習目標 看完本章, 您應該學會以下主題: 什麼是程式語言 程式語言的發展歷程 程式語言的分類 目前常見的程式語言特性

3 13-1 何謂程式語言 身為電腦使用者, 我們常會說:『用 xx 程式來做 yy 事情。』這麼多能做不同事情、發揮不同功效的應用程式是如何產生的呢?簡單的說, 是程式設計人員 (Programmer) 用程式語言 (Programming Language) 所寫出來的。

4 13-1 何謂程式語言 電腦是用來幫助人們解決問題的, 而電腦硬體要能幫我們解決問題, 就必須有程式(軟體) 告訴電腦要做什麼事。所以程式語言可說是人控制電腦如何做事的一種語言, 而為了符合不同的需求、解決不同類型的問題, 也使資訊界出現各種不同的程式語言, 例如一般人可能都曾聽過的組合語言、BASIC、C、C++、Java 、...等等。 以下我們進一步來瞭解為什麼會有這麼多種不同的程式語言, 以及其間的差異。

5 13-2 程式語言的發展 如果不考慮一百多年前的分析機 (Analytical Engine, 參見第 1 章), 第一個程式語言的出現至今才不過半個世紀多, 但在短短的 50 年, 就已發展出數量多到令人眼花撩亂的程式語言種類。程式語言最簡略的分類方式, 就是將它們依『抽象化』的程度分成高階語言 (High-Level Language)、低階語言 (Low-Level Language) 兩類:

6 13-2 程式語言的發展 以下我們就簡單介紹這幾類不同的語言及其發展過程。

7 第一位程式設計師:Ada Lovelace
第一章曾提過早在 19 世紀時, Charles Babbage 曾設計及製作號稱是第一部計算機的差分機,當時雖未完成, 但Charles Babbage 又著手設計另一更複雜的分析機。

8 第一位程式設計師:Ada Lovelace
當時有一位義大利機械學者 Luigi Federico Menebrea 以法文發表了一篇描述分析機功能及理論的論文, 而 Charles Babbage 則請與他合作的 Ada Lovelace 女士 (Augusta AdaKing, Lovelace 女伯爵, 一般簡稱 Ada Lovelace, 著名英國詩人拜倫的女兒) 將此文章翻譯成英文。

9 第一位程式設計師:Ada Lovelace
Ada 除了翻譯外, 還加上篇幅勝過原文的註記 (Note), 在這些註記中, Ada 提出了許多有關程式設計的基本理念, 甚至還寫下了如何用分析機計算『白努力數』(Bernoulli Numbers) 的流程。 她的成就使得後人稱她為第一位電腦程式設計師, 而美國國防部也在 1980 年, 將他們開發設計的程式語言正式命名為 Ada 語言以茲紀念。

10 第一位程式設計師:Ada Lovelace

11 第一代:機器語言 對於電腦來說, 它真正所懂得的語言只有一種, 就是機器語言。所謂的機器語言, 其實是以特定的數字來表示電腦所能進行的各個動作, 我們稱這些數字為機器碼 (Machine Code) 或機器語言。 舉例來說, 如果把電腦比喻為一個只認得數字命令的機器人, 而 0 代表向前走一步、1 代表向後退一步、2 代表往左轉 90 度、而 3 代表往右轉 90 度。

12 第一代:機器語言 那麼當我們要命令這個機器人往前走三步、再往右走三步時, 就必須下達『 』的指令, 當電腦看到這一串數字後, 就會依照每個數字所代表的意義做出指定的動作:

13 第一代:機器語言

14 第一代:機器語言 相信大家都會發現, 用數字來控制機器人會相當辛苦, 因為我們得先熟記每個數字所代表的動作, 然後還要能將一連串數字組合起來, 以表達我們要機器人做的工作。

15 第一代:機器語言 不過上述的機器人例子, 其實已經簡化機器語言的複雜性。CPU 只能接受一組預先定義好的指令, 而且這些指令其實都只是做一些非常基本的計算或控制動作, 所以要讓電腦做一項簡單動作, 可能需要數個指令才能完成。 以目前通用於個人電腦 x86 系列 CPU 為例, 要讓它計算 "3-1" 這個減法計算, 必須先將數字 3 存到暫存器 (參見2-2-1節) 後進行運算。

16 第一代:機器語言 任何一個人都可以看得出來, 這種以數字表達的語言並不適合人閱讀。因此大家很快就發現要用這種方式撰寫程式, 實在太難、太辛苦了。所以人們就開始思考如何能以更友善的方式來撰寫程式。

17 關於程式『碼』 在程式設計的領域, 常可聽到程式碼或原始碼 (Source Code) 這樣的名詞。『碼』就是由英文字 Code 翻譯而來, 其原意是指機器語言的數字碼。 雖然我們使用各種高階語言 (後詳)所撰寫的程式早已脫離用數字寫程式的形式, 不過 Code 這個字仍沿用至今, 因此對任何程式語言所寫成的原始程式, 都可稱之為程式碼或原始碼。

18 第二代:組合語言 由於使用以 0、1 組合成的機器語言來撰寫程式實在太不方便, 因此人們就想到將這些機器碼都代換成較方便學習、記憶的助憶碼 (Mnemonic), 也就是組合語言 (Assembly Language)。

19 第二代:組合語言 以前面的機器語言程式為例, 將資料從某處移到某處的動作就用英文單字 Move 的前三字 MOV 來代表;而將數值減 1, 就用 Decrease 的前 3 字 DEC 來代表, 所以前述的程式用組合語言來寫就變成如表 13-2 所示。

20 第二代:組合語言 組合語言程式必須轉換成微處理器真的看得懂的機器語言碼, 才能讓電腦執行。將組合語言程式轉換成機器語言程式的動作稱為組譯, 用來將組合語言碼轉換 (翻譯) 成機器碼的工具稱為組譯器 (Assembler)。

21 第二代:組合語言 由於機器碼和組合語言碼有對應關係, 所以也可以反向由機器碼產生組合語言碼的程式, 此動作稱為『反組譯』, 所用的工具稱為反組譯器 (Disassembler)。

22 第二代:組合語言 雖然用助憶碼來代替原本的數字程式碼已改善原本用機器碼寫程式的諸多不便及容易出錯等缺失, 但是用組合語言寫程式仍有一大缺點:程式設計者必須對微處理器架構、電腦硬體架構要有充份的認識。

23 第二代:組合語言 例如表 13-2 中的程式就用到了 AX 暫存器 (AL 代表 16 位元 AX 暫存器中的低位元組), 換言之, 要用組合語言寫程式, 至少必須認識微處理器中有哪些暫存器可使用、各暫存器的功用為何;如果程式需存取到週邊裝置, 則需認識如何透過 BIOS 或特定的輸出輸入埠 (I/O Port), 將資料送到輸出裝置或由輸入裝置取得資料。

24 第二代:組合語言

25 第二代:組合語言 然而要充份認識微處理器架構、電腦硬體架構後才能開始寫程式, 就好像要求我們要先瞭解引擎結構、傳動系統之後才能學開車;要先認識無線電原理及語音轉換成無線電的編碼方式才能用手機打電話:這將對汽車、行動電話的推廣有莫大的阻礙。 同理, 組合語言提高了撰寫程式的門檻, 也因此限制了電腦的普及。此外, 以組合語言撰寫程式還有下列缺點:

26 13-2-2 第二代:組合語言 因為使用的助憶碼仍是代表微處理器的指令 , 也就是要以微處理器的角度來思考問題, 開發程式仍相當不便。
不同硬體架構的微處理器其機器碼都各不同, 例如一般個人電腦所用的 x86 系列CPU, 和許多智慧型手機使用的 ARM CPU 其機器語言就不相同, 組合語言也有差異,要讓程式可在不同的電腦上執行, 必須重新改寫程式。

27 第三代:高階語言 不論是機器語言還是組合語言, 對於程式的描述都是以電腦所能進行的最基本動作為步驟, 因此這兩種語言被稱為低階語言。為了讓人們能以更接近人的思考方式來寫程式,就有了所謂的高階語言。

28 第三代:高階語言 第一個被廣泛使用的高階語言為 1950 年代所開發出來的 Fortran (Formula Translator) 語言, 此後更多的語言如 COBOL 、BASIC、Pascal 、C ... 等等就如雨後春筍般地出現。高階語言中有些是專為某些用途而設計的, 但也有些是特別設計成通用性 (General Purpose) 的語言。

29 第三代:高階語言 但由於各語言都有不同優缺點, 也因此各有其適用的場合, 再加上每個人對語言有不同的喜好程度, 所以至今仍有相當多的語言存在, 我們也因此有許多程式語言可選擇。

30 第三代:高階語言

31 第三代:高階語言 高階語言與低階語言之間最明顯的差異, 在於高階語言多是以近似英語的語法來撰寫, 因此學習的難度降低, 寫來也較不容易出錯。例如以下的 BASIC 語言程式片段, 就算沒學過 BASIC 語言的人, 也能大概猜出其意思。

32 第三代:高階語言

33 第三代:高階語言 圖 13-6 中的 BASIC 程式做的事很簡單:請使用者輸入姓名和年齡, 再將使用者是幾歲用英文輸出到螢幕上。程式中的 INPUT 、PRINT 就是所謂的關鍵字 (Keyword) 或保留字(Reserved Word), INPUT 就是『取得輸入』的意思、PRINT 就是『印出』一段訊息。

34 第三代:高階語言 每種程式語言因功能各有不同, 所以都有不同的關鍵字或保留字, 而且通常都會取與該英文單字同樣的意思, 例如很多語言都有 IF 這個關鍵字, 表示『如果...』, 透過它就能設計出『如果買的商品超過 5 件都打 8 折...』這類的程式。

35 第三代:高階語言

36 第三代:高階語言 在上述程式片段中所出現的 age% 、Name$ 稱為變數 (Variable), 在高階程式語言中, 藉由變數這種比較抽象的資料表示方式, 讓程式設計者不必像在寫低階語言程式時還要自行操作暫存器或記憶體位址, 所以就算對硬體架構不熟悉, 也能寫出實用的程式。

37 第三代:高階語言 雖然寫程式的門檻降低, 但也連帶使程式的執行效能下降:一般而言, 同樣的程式,用高階語言撰寫者, 其執行效能會比以組合語言撰寫者差。不過透過編譯器 (後詳) 的改良、硬體速度的飛快成長, 使其間差異愈來愈小, 甚至可忽略, 因此目前通常只在特別要求執行效能的程式, 才會使用組合語言。

38 第三代:高階語言 高階語言寫成的程式, 和組合語言一樣需要經過轉譯的動作, 才能變成電腦認得的機器語言並執行之。高階語言轉譯的動作分成兩種:編譯 (Compile)及直譯 (Interpret)。

39 編譯 所謂編譯的方式, 是先將整個程式從頭到尾讀完, 然後將內容轉換成電腦所認識的機器碼。這就好像是翻譯一篇文章, 是先將整篇文章從頭讀到到尾後, 將它全部翻譯好,然後才拿給讀者閱讀。

40 編譯 將文章一次翻譯好, 往後不論何時或何人需要閱讀, 都不需要再重新翻譯, 就可以直接閱讀翻譯好的版本。不過相對來說, 在第一次想要閱讀之前, 就必須先花時間等待譯者翻譯完畢才行。 編譯程式也是如此, 編譯時會花一點時間, 一旦編譯完成, 往後隨時都可執行程式。編譯時所用的工具稱為編譯器 (Compiler), 編譯器會將用高階語言寫的程式轉成機器碼。

41 編譯

42 編譯 高階語言程式經過編譯後即產生機器碼, 通常並非可立即執行的可執行檔(Excutable), 編譯後的產物稱為目的碼 (Object Code) 或目的檔 (Object File)。 這是因為高階語言程式中通常會用到別人或自己事先寫好的其它程式 (例如函式庫), 所以編譯好程式後, 必須再用連結器 (Linker) 將我們程式的目的碼與其它程式的目的碼連結後, 才會產生實際可執行的程式。

43 編譯

44 編譯 由於每種電腦的機器語言並不相同, 比如說一般所用的 x86 個人電腦 (PC) 和平板筆電使用的 ARM 處理器之機器語言就不相同。因此, 同一個程式如果要在不同的機器上執行, 就必須使用專為該種電腦所設計的編譯器, 轉譯出符合該電腦的機器碼才行。

45 函式庫 雖然每個人寫程式的目的不同、用途也五花八門, 但不可免的是所有程式都會有彼此重疊的功能。例如瀏覽器、電子郵件軟體、線上聊天程式, 雖然其功能各有不同, 但很顯然這些程式都要有一段透過 TCP/IP 通訊協定將資料送到網路、或接收資料的功能。

46 函式庫 如果每個開發瀏覽器、電子郵件軟體、線上聊天程式的程式設計人員, 都要自己撰寫這段功能相同的程式, 則軟體產業就太沒有效率, 我們今天也不會有這麼多五花八門的應用程式可以使用。

47 函式庫 因此為了避免『重複發明輪子』 (Reinvent the Wheel) 的窘境, 程式語言都會將一些常用的程式功能事先設計好, 讓寫程式的人可直接『呼叫 (Call) 』 它們, 如此就不必每個人都要自己寫一段功能相同的程式了。 這些事先寫好的程式, 依程式語言的不同, 有些稱其為子程序(Subroutine)、或函式 (Function)、或程序 (Procedure) 等等。

48 函式庫 這些寫好的程式都會事先編譯好, 其目的碼則集合存於函式庫 (Function Library) 中, 像C 語言就有提供處理輸出/入、數學、時間等多類功能的函式庫。 當我們的程式需要計算某數的平方根時, 不必自己設計算平方根的程式, 只需以該數字為參數, 呼叫函式庫中的 sqrt() 函式, 該函式就會自動將計算結果傳回給我們的程式。

49 函式庫

50 函式庫

51 函式庫 除了程式語言本身的函式庫, 軟體廠商也會提供函式庫給大家使用, 例如微軟公司會提供設計 Windows 應用程式所需的函式庫, 讓大家能方便撰寫 Windows 應用程式 (要不然每個寫Windows 程式的人都要自己寫一段顯示『視窗』的程式)。

52 函式庫 對於這類具有特定功能的函式庫, 其提供的功能一般又稱為應用程式開發介面 (API, Application Programming Interface), 例如設計 Windows 應用程式所用的函式庫稱為 Win API、Win32 API (32 是 32 位元的意思)。 提供 API 的可以是作業系統或其它的應用程式, 我們的程式只要呼叫它們所提供的 API, 即可讓它們執行某項功能。

53 直譯 直譯式的作法和編譯式有很大的差異, 直譯式是用直譯器 (Interpreter,亦稱為解譯器) 每讀取程式中的一個敘述 (Statement) 時, 即翻譯成機器碼執行之, 並持續這樣邊讀程式、邊執行程式。這就好像是參加國際會議時的現場口譯一樣, 主講者邊講, 口譯者便即時翻譯給大家聽。

54 直譯 同步口譯的好處是, 只要主講者講完第一句話, 口譯者便開始翻譯, 而不需要等待主講者整篇發言完畢。但相對的, 由於口譯者即時翻譯完就結束了, 因此如果需要重新聽一遍, 就只好從頭再請口譯者翻譯了。 直譯式的原理也是如此, 每次執行時都要啟動解譯器, 然後載入原始程式逐步解讀、執行。且由於沒有儲存轉譯的結果, 往後要再執行相同的程式時, 又要重新解譯一次。

55 程式語言種類與執行方式的關係 大部分的程式語言, 都有其固有的執行方式。比如說, C/C++ 一般都是編譯式;而Basic 一般則是直譯式。因此過去也常將高階語言分類成直譯式語言和編譯式語言。 不過這種分類方式已漸不適用, 因為目前許多語言都有直譯器和編譯器可用, 例如有人為C++ 語言設計出直譯式的直譯器;相同的, 也有軟體公司為 Basic 語言做出編譯器。

56 程式語言種類與執行方式的關係 不論是編譯式或是直譯式, 兩種方法各有巧妙, 而以目前較為流行的程式語言來說, 兩種方式都各有擅長。

57 第四代及第五代語言 高階程式語言雖然讓人們能更輕鬆編寫程式, 但實際上, 要『寫好』程式, 仍需經過相當多的學習與訓練。因此為了減輕程式設計者的負擔, 讓寫程式變得更容易, 就有人發展出所謂的第四代語言。

58 第四代及第五代語言 不過對第四代語言目前並無明確的定義, 大體而言, 一般所稱的第四代語言都是指能自動產生程式的工具, 例如報表產生器 (Report Generator) 及 CASE (Computer Aid Software Engineer, 電腦輔助軟體工程) 工具;或是可花較短時間即可學會的特定用途語言, 例如專門用於查詢資料庫資料的 SQL 語言, 其語法比第三代語言更加口語化, 學習的門檻也降低。

59 第四代及第五代語言

60 第四代及第五代語言 至於第五代語言 (5GL, Fifth Generation Languages) 則被稱為自然語言 (Nature Language), 其目的是希望人們能以更接近日常生活的方式來命令電腦(設計程式就是要控制電腦), 此一理念是與第五代電腦的計劃一起提出的。 然而由於第五代電腦的發展計劃也無實際的成果, 第五代語言的概念早在上個世紀即被提出, 但發展多年仍未有比較實用的成果。

61 隨堂練習 1.請簡述編譯與直譯兩種產生機器碼方式的差異。 2.請列出五種您所認識的高階語言。

62 13-3 程式語言的類型 除了用程式語言的發展歷程來分類外, 也可用程式語言的設計架構 (Paradigm)來做分類, 亦即以設計程式時所用的設計方法來分類。主要的 4 種分類為:命令式(Imperative) 語言、函數式 (Functional) 語言、邏輯式 (Logic) 語言、及物件導向式(Object-Oriented) 語言。

63 命令式語言 命令式 (Imperative) 語言是『用一組有次序性的命令』來組成一個程式, 只要逐步執行程式中的每一個命令, 即可得到所要的結果。因此也有人稱之為程序式 (Procedural) 語言, 因為程式的內容就像一連串的程序;或稱敘述導向式 (Statement Oriented) 語言,因為程式就是由一道道的敘述所組成。

64 命令式語言 命令式語言的特性包括可定義用來儲存資料的變數、可對變數進行指定 (assign) 動作將它設為某個數值、具有重複性, 也就是可讓程式重複執行某些敘述以達到某項功能。 舉例來說, 大家都曾學過用『輾轉相除法』來計算兩個數的最大公因數, 輾轉相除就是一個要重複做的計算動作, 這個計算過程, 用 C 語言寫成的內容如圖 所示。

65 命令式語言

66 命令式語言 直到數年前, 較普及的程式語言仍都是命令式語言, 包括歷史悠久的 Fortran、COBOL 、 C、Pascal 等等, 但近年來的趨勢則是 Java、C++ 等物件導向式語言漸成主流。

67 命令式語言

68 函數式語言 函數式語言源自於數學的函數觀念, 語言本身就提供一些基本的函數 (例如加減乘除都是函數), 設計程式時則是定義自訂的函數模組 (稱為 λ, lambda) 來解決問題。 例如前述的求最大公因數問題, 可將求最大公因數的計算方式定義成一個自訂函數, 然後用它來計算任兩數的最大公因數, 如圖 所示。

69 函數式語言

70 函數式語言 最早的函數式程式語言為 John McCarthy 於 1958 年所發展出的 LISP (List Processing) 語言, 其後衍生出許多語言, 目前較知名的有 Common LISP、Logo 及 Scheme 等語言。

71 邏輯式語言 顧名思義, 邏輯式語言是用邏輯性的敘述來說明事物彼此的邏輯及推演關係, 在邏輯式語言中稱之為事實 (Fact) 和規則 (Rule), 定好事實和規則後, 即可利用它們的邏輯關係推演出使用者需要的答案。 同樣以求最大公因數為例, 使用邏輯式語言時, 就需先定義計算最大公因數的事實與規則, 圖 即是用邏輯式語言 Prolog 所寫成的程式。

72 邏輯式語言

73 邏輯式語言 早期的邏輯式程式語言以 1972 年 Alain Colmerauer 和 Robert Kowalski 所創的 Prolog (programmation en logique, 法文的 "programming in logic") 為濫觴, 其後雖然在學術界出現不少邏輯式程式語言, 但仍以 Prolog 及其商業化的旁枝 (例如 Turbo Prolog 、Visual Prolog) 為主流。 此外日本在發展其第五代電腦時, 該計劃也是以 Prolog 為主要的開發語言。

74 物件導向式語言 物件導向程式設計是因應模擬人們實際接觸到的事物而生的, 在我們平常接觸到的事物, 不管是汽車、電視、小狗, 都可視為一種物件 (Object)。 物件能用一組屬性來描述其特性, 例如汽車物件有顏色、輪子;而同類物件也會有類似的行為, 例如汽車可前進、後退、轉彎。此時我們就可用類別 (Class) 定義來描述同一類型的物件, 例如卡車、跑車、轎車都可算是汽車類別。

75 物件導向式語言

76 物件導向式語言 定義好類別後即可用類別來定義不同的物件, 例如我們可用汽車類別定義一輛手排的紅色跑車物件, 或一輛自排的銀色轎車物件。各物件可依需要做不同的行為, 例如紅色跑車換檔加速, 銀車轎車剎車減速。

77 物件導向式語言

78 物件導向式語言 最早的物件導向程式語言為 1960 年代由 Ole-Johan Dahl 和 Kristen Nygaard 所發展出來的 Simula 語言 (取『模擬』Simulation 之意), 其後也衍生出許多語言, 例如近年來最熱門的 C++ 和 Java , 其它較知名的還有Smalltalk 、Ada 等。

79 物件導向式語言

80 其它程式設計類型 除了以上幾種程式設計類型外, 還有許多方式可將程式設計的方法或程式語言加以歸類, 如並行程式設計 (Concurrent Programming)、泛型程式設計 (Generic Programming) 等。

81 其它程式設計類型 許多程式語言其實是支援一種以上的程式設計方法, 例如 C++ 語言, 雖然一般視之為物件導向程式語言, 但它其實也同時支援命令式及泛型程式設計方法, 所以我們也可設計一個看起來仍是命令式、程序式的 C++ 程式。

82 隨堂練習 1. 四種主要的程式設計方法為何? 2. 大部份高階語言都是採用何種設計方法?

83 13-4 著名的程式語言簡介 本節簡單介紹幾個程式語言的發展歷程及現況, 讓讀者對程式語言及其應用能有更多的認識。

84 Assembly 第一個組合語言應該是於 1945 年時發展出來的 ENIAC 電腦 (參見第 1 章) 的組合語言, 起初連組譯器都沒有, 因此人們所寫出的組合語言程式, 仍是以人工將之譯為機器碼。

85 Assembly 如前所述, 組合語言是以助憶碼來取代機器語言, 不管是您桌上個人電腦或口袋中的行動電腦, 其內的微處理器的機器語言都不相同, 因此也各有自己的組合語言。雖然很多微處理器的組合語言外表看來都很類似, 也有相同的指令, 但因硬體架構的不同, 使同樣功能的程式寫出來也有很大的差異。

86 Assembly 現今雖然大部份的程式都是用高階語言所寫, 但在開發某些系統時, 為了追求較佳的執行效率, 有時仍會用組合語言來開發部份的程式模組。另一方面, 現今組譯器的功能也有所加強, 例如透過特殊的組譯器指令 (Directive) 來提供類似高階語言的語法, 以簡化程式的撰寫。

87 Fortran 在 年時, IBM 公司中由 John Backus 領導的團隊開發出 Fortran (Formula Translation) 語言, 如其名稱『方程式轉換』的意涵, 這是個主要用於數值計算的程式語言。此後 Fortran 成為第一個被廣泛使用的高階程式語言, 而且隨後許多新的程式語言, 在開發之初都有參考、使用 Fortran 語言的內容, 因此 Fortran 也是許多程式語言的祖先。

88 Fortran 雖然 Fortran 已有相當久的歷史, 但仍持續在發展演進, 至今在科學、工程的應用領域中仍廣被使用。在 1966 年時美國國家標準協會 (ANSI, American National Standards Institute) 即制訂了 Fortran 語言第 1 個標準, 稱為 Fortran 66, 其後又有Fortran 77 、Fortran 90 、Fortran 95 、Fortran 2003 (由國際標準組織 - ISO - 制訂) 等標準。

89 Fortran 在 Fortran 90 時, 即納入了部份物件導向程式設計的特性;至 Fortran 2003 時, 對物件導向程式設計的支援更完整, 也可算是個物件導向程式語言。

90 Fortran Fortran 語言的名稱在過去都是用大寫英文字母表示, 如 FORTRAN、FORTRAN 77 等, 但自 Fortran 90 開始, 官方標準文件上所用的名稱只保留首字大寫, 所以也有人用全部大寫的FORTRAN表示 90 之前的版本;用 Fortran 表示 90 及其後的版本, 不過本書均統一用 Fortran 表示之。

91 Fortran

92 COBOL COBOL (COmmon Business Oriented Language) 語言是在 1959 年由美國國防部所主導的一個委員會所訂出的語言規格, 並於次年實作出來。如其名稱所示, 這是個以商業應用為主的程式語言, 且 COBOL 語言有一項特性, 就是程式語法很像英文。

93 COBOL

94 COBOL 由於除了政府及學術機構外, 電腦最主要的用戶就是商業性的組織, 所以COBOL 語言的使用可說是相當廣泛, 數年前的 Y2K 危機 (早期電腦程式只用兩個數字記錄西元紀元, 導致到 2000 年時, 會有 00 是表示 1900 年或 2000 年的問題), 政府、金融機構即花費大量人力物件在修正其 COBOL 程式。 據稱目前大型主機上所執行的程式, 仍有半數以上是以 COBOL 所撰寫的。

95 COBOL ANSI 在 1968 年制訂了 COBOL-68 的標準, 其後又有 COBOL-74、COBOL-85 、COBOL 2002, 而且和 Fortran 類似, 在 COBOL 2002 時納入了支援物件導向程式設計的語法。

96 BASIC BASIC (Beginner‘s All-purpose Symbolic Instruction Code) 是於 1963 年由 John George Kemeny 及 Thomas Eugene Kurtz 所發展出來的, 其目的是要讓非電腦專業人士也能學習撰寫程式、善用電腦。 此後隨著個人電腦的普及, 加上當時 DOS 及早期 Windows 作業系統中都附有基本的 BASIC 直譯器(早期甚至有電腦是將 BASIC 直譯器燒錄在 ROM 中), 使得 BASIC 一度也成為相當風行的程式語言。

97 BASIC ANSI 及 ISO 雖也有制訂 BASIC 語言的標準, 但並不像其它語言的標準般受重視, 反而是廠商的各種 BASIC 版本較為人知, 例如微軟公司從過去的 GW-BASIC、QuickBASIC、QBASIC (算是前者的陽春版) 一直到現今的 Visual Basic, 都是廣為人知的產品。 早期的 BASIC 程式每一列開頭都必須加上編號, 但現今的各種 BASIC 語言則不必如此。

98 Pascal 以紀念法國數學家 Blaise Pascal 而命名的 Pascal 語言, 是於 1970 年由 Niklaus Wirth 發展出來的, 其目的和 BASIC 類似是要做為教學性的語言, 但 Pascal 的對象是大學學生, 因此一度大部份電腦相關科系都是以教授 Pascal 語言為主。 在個人電腦萌芽的時代, 當 Apple II、 IBM PC 等電腦推出時, 也都很快就有 Pascal 語言的編輯器, 使得 Pascal 成為 BASIC 外另一個相當普及的程式語言。

99 Pascal 原本即因推出 Turbo Pascal 而廣受歡迎的 Borland 公司, 後來自行加入了物件導向的語法, 推出後續的 Delphi。不過受近年 C++/Java 熱潮的影響, Pascal/Delphi 受歡迎程度已不如以往, 學校教授 Pascal 的盛況也減少許多, 不過仍是有一群固定愛好者支持。

100 C/C++/C# C 語言 C 語言是 1972 年在 AT&T 貝爾實驗室 (Bell Laboratory) 中發展出來的, 原創者 Dennis Ritchie 當時是為了要發展 UNIX 作業系統, 所以需要一種具有類似組合語言般的高效率, 以及能很方便移植到各機型 (高可攜性) 之程式語言, 於是創造了 C 語言。後來, 由於 C 語言所具備的效率、彈性、可攜性等各項優點, 逐漸成為一種廣受歡迎的程式語言。

101 C 語言 C 語言的優點包括: 程式碼精簡, 產生的程式執行效率佳。 具有很高的可攜性。 完全支援模組化的程式設計。 彈性大而擴充性強。

102 C 語言 Dennis Ritchie 及 Brian Kernighan 在 1978 年合著The C Programming Language 一書, 其中所描述的 C 語言語法規則在當時被視為 C 的標準, 稱為 "K&R C"。 而 ANSI 則是在 1983 年時開始著手制定 C 語言的標準, 並在 1989 年時推出俗稱為 C89 的第一版標準;1999 年時則有了更新的 C99, 其中引入了一些原本屬於 C++ 的語法, 例如:變數可在任何位置宣告 (過去都必須在每個程式區塊的開頭)、支援"//" 的註解方式等。

103 C++ 語言 C++ 和 C 語言一樣, 也是在貝爾實驗室中發展出來的。原創者 Bjarne Stroustrup 從 1979 年開始, 以 C 語言為基本架構, 再加上物件導向程式設計相關功能, 發展出一個名為 "C with Classes" 的新語言, 其後又經過一些改良, 並在 1983 年時正式被命名為C++, 且仍與 C 相容並保有 C 原來的各項優點。

104 C++ 語言 在 C 語言中, "++" 是遞增的意思, 如果將 C 當成是變數, 則 C++ 就代表把 C 的值加 1 。所以 C++ 的意思是代表一個更好、功能更強的 C 語言。

105 C++ 語言 C++ 的標準化是由 ANSI 和 ISO 共同進行的, 兩個組織在 1998 年正式發布了編號為 ISO/IEC 14882:1998 的 C++ 標準, 簡稱為 ISO C++98 或 C++98。在此之後, 各主要 C++ 編譯器廠商大多也都遵循 ISO 的標準來設計他們的產品。

106 C# 語言 C# (讀音為 C Sharp) 是微軟公司所發展的物件導向式語言, 其同時繼承 C++ 與 Java (詳見下一節) 語言的特點, 而且 C# 架構於微軟 .NET Framework 之上, 所以也具有類似 Visual Basic 的快速開發能力。

107 C# 語言 由於微軟將 C# 開放出來, 目前已經成為 Ecma 與 ISO 標準, 所以已經有多家廠商依照標準在各系統實作 C# 編譯器。此外, C# 除了可以撰寫應用程式, 也可用於製作 ASP.NET 網頁程式, 因此使用者也日益增加。

108 Objective-C Objective - C 是以 C 為基礎, 加入物件導向擴充而成的程式語言。目前Objective-C 主要使用在 Mac OS 與 iOS 這兩個系統上, 所以如果要設計 iPhone/iPad 應用程式, 便必須使用 Objective-C。

109 Java Java 程式語言的發展源自 1990 年昇陽公司 (Sun Microsystems) 為開發資訊家電(Information Appliance) 所組成的『Green』小組的成果, 該小組設計了一個稱為 Oak 的程式語言。 但因為 Oak 已經被其他公司註冊為商標, 因此小組成員才將這個程式語言以他們最愛喝的爪哇 (Java) 咖啡命名, Java 於焉誕生。

110 Java 在 1995 年 Java 程式語言正式公開時, 主要是用來撰寫在網頁上執行的小程式 (稱為 Java Applet), 以便在當時仍以靜態網頁為主的 WWW 上提供一些互動功能。 但隨著日後的發展, Java 程式語言也成為軟體開發的主流之一, 而且功能除了涵蓋了一般應用軟體到網際網路應用程式, 就連行動電話上也能看到 Java 程式的身影。另外如果要在Android 手機或平板上設計應用程式, 目前主要也是使用 Java 作為開發的程式語言。

111 Java

112 隨堂練習 1.C 語言有什麼優點? 2.除了在電腦上, 您還知道有哪些電子產品可執行 Java 程式。

113 13-5 程式的設計與開發過程 在認識了許多程式語言後, 我們回頭來認識一下程式的開發過程:到底程式是如何寫成的?在一般應用程式的開發過程中, 『寫程式』究竟佔了多少時間?

114 13-5 程式的設計與開發過程 我們可將程式的開發過程分為以下 6 步驟: 定義與分析問題 設計解決方案 撰寫程式 測試與除錯 製作文件
後續維護

115 1. 定義與分析問題 寫程式就是為了讓電腦來幫助我們解決問題, 因此程式設計的第 1 步, 就是要先釐清問題, 以及希望得到的結果 (需求)。 如果我們要寫的程式是學校程式設計課程中的一個簡單作業, 那這個程式的問題就不會太複雜, 因為問題和需求通常老師都已訂好了, 學生只要有辨法寫出程式即可。

116 1. 定義與分析問題 但在商業應用程式的領域, 使用者要解決的問題及需求會比學校作業複雜許多, 因此這時候程式設計者、或是專責系統分析的人員, 就要與使用者 (客戶) 做相當多的溝通。 例如公司的訂單格式為何、有哪些資料要輸入到程式、訂單資料應如何分類、使用者希望以哪些方式查詢、程式要提供哪些訂單統計資訊..., 這些問題都必須在事先釐清, 寫出來的程式才有可能符合使用者的需求, 不致於發生程式寫好但不符需求, 而必須重寫的問題。

117 2 . 設計解決方法 釐清問題與需求後, 就要開始著手設計解決問題的方法, 或稱演算法 (Algorithm), 此步驟也可稱為設計程式 (Program Design, 非指 Programming), 也就是要決定如何撰寫程式, 使程式能解決問題。

118 2 . 設計解決方法 在這個階段通常會用『由上而下』 (Top-Down) 法將一個大問題分解成數個較小的問題, 然後每個小問題再進一步分解成多個更小的部份。 例如要設計一個訂單處理程式, 可將之分成訂單輸入及訂單處理兩部份, 訂單輸入可分成資料輸入及資料儲存兩階段..., 如此一直細分下去, 將程式功能分成多個小的模組, 在撰寫程式時就能順利分段或分工完成。

119 2 . 設計解決方法

120 2 . 設計解決方法 在這個階段, 也常會用到流程圖 (Flow Chart) 或虛擬碼 (Pseudo Code) 來描述將要撰寫的程式功能。流程圖是以簡單的圖形符號來表示解決問題的步驟 (流程);而虛擬碼則以是以類似於程式語言語法的文字敘述來表示程式的處理步驟。 將程式的主要內容先用流程圖及虛擬碼描述好, 這樣在下個階段才能依需要順利寫出程式, 不致在寫程式時還要邊寫邊想, 降低效率。

121 2 . 設計解決方法

122 3 . 撰寫程式 高階語言程式都是以文字檔的形式儲存, 而編寫好的程式, 視語言的種類還需用到直譯器或編譯器加連結器, 因此整個開發工作需用到不少工具。為了方便程式的撰寫及開發, 目前許多程式開發都會使用較方便的整合開發環境 (IDE, Integrated Development Environment, 參見 7-23 頁)。

123 3 . 撰寫程式 簡單的說, IDE 提供了一個編寫程式專用的程式編輯器及圖形介面設計工具, 而且可在此環境下啟動編譯器、連結器來進行編譯與連結的動作, 此外大多的 IDE 也結合了實用的除錯、專案管理等多種輔助功能與工具, 讓程式/專案開發的過程更輕鬆、方便。

124 3 . 撰寫程式

125 3 . 撰寫程式 撰寫程式的方法中, 有一種主要應用於命令式語言的結構化程式設計 (Structured Programming) 方法。其原則就是不論是多複雜的程式, 在程式中應該只使用三種結構: 連續 (Concatenation):表示程式中的敘述按順序依次執行。 選擇 (Selection):表示依程式的狀態, 決定要執行哪一個敘述, 例如前面表 13-5 中的例子, 就有『當分數大於等於 90 分』、及『當分數小於 90 分』等選擇情況, 不同的情況程式就會做不同的動作。

126 3 . 撰寫程式 重複 (Repetition):程式會一直重複執行某一段敘述, 直到達到某個狀態為止。再以表13-5中的判定學生等第為例, 我們可將這段判斷的流程置於一重複結構中, 此重複結構則會重複處理資料庫中所有學生, 如此一來我們就能用一小段程式來重複判定所有學生的等第了。

127 3 . 撰寫程式

128 3 . 撰寫程式 高階語言都提供實作出選擇、重複結構的語法, 雖然多數語言也提供非結構化的語法指令, 但由於結構化程式設計確實有讓程式的邏輯較為清楚、易懂的優點, 也因此廣為學界及業界採用。

129 4 . 測試與除錯 在撰寫程式每告一段落, 例如已先設計好陽春的訂單輸入功能時, 即可先編譯該部份的程式並做測試。以檢查程式是否除了語法錯誤 (Syntax Error) 之外, 還有邏輯錯誤 (Logic Error)。

130 4 . 測試與除錯 語法錯誤只需用編譯器/直譯器即可檢查出來, 而邏輯錯誤通常必須透過實際執行程式, 測試各種不同情況執行結果, 才能檢查出來。因此在測試階段, 有時也要請使用者來實際體驗。

131 除錯與抓蟲 在英文中, 替程式除錯稱為 "Debug" (抓蟲), 而程式中的錯誤則稱為 Bug (蟲)。這是因為早在 1945 年時, 美國海軍所用的大型主機 Harvard Mark II 電腦發生問題, 程式執行結果始終不正確, 後來發現原來是有一隻飛蛾誤入機器之中, 造成電路短路所致。 由於是真的『蟲』所造成程式問題, 因此後來都將排除程式問題的動作與過程為 "Debug"。

132 除錯與抓蟲

133 5 . 製作文件 在前面設計、開發的過程中, 都會產生許多文件資料, 當程式開發完成後, 就需將這些資料整理起來, 以供日後追蹤、參考。因為負責修改、開發新版程式的人員可能隨時會變動, 若要別人沒有任何參考資訊的情況下來修改程式, 可說是相當令人頭痛的, 後繼者將要浪費許多時間做前人做過的事情。

134 5 . 製作文件 程式中的『註解』也可以視為一種文件, 註解雖然是寫在原始程式之中, 但其功能是『寫給人看的文字說明』, 而編譯器/直譯器會將之忽略, 因此一般都會要求程式設計人員在程式中加入詳實的註解, 讓原始程式更具可讀性。 更重要的是, 這時也需要為軟體的使用者撰寫使用手冊、參考手冊等文件, 幫助使用者能瞭解程式的功能與用途。

135 6 . 後續維護 人的需求會改變, 組織的運作方式也會隨著時間變化, 因此寫好的程式可能不定時就需修改, 簡單如改正先前未發現的某項錯誤;複雜如改變作業流程、增加新功能等等。如前述, 在改寫程式時, 可能都不是原先撰寫程式的人員負責, 所以若要讓維護工作能有效進行, 前一段的文件製作就需做得完整詳實。

136 隨堂練習 1.您還知道有哪些流程圖符號?請向同學說明它們代表的意義。 2.在程式設計過程中, Debug 是指什麼動作?

137 特別企劃 手機程式收費機制 對於購買軟體, 您是否還停留在精美盒裝、一長串序號、防拷光碟、線上啟用等印象?或還存有正版軟體很昂貴, 用盜版就好的想法?

138 特別企劃 軟體開發者與軟體使用者面臨的問題
傳統的軟體購買方式大致可分為實體與線上兩種方式, 軟體開發者必須將盒裝軟體鋪貨到 3C 商店、書局等行銷通路, 以提供實體購買方式;或者必須架設網站, 建立線上金流刷卡機制, 以便使用者線上購買。 對於開發者來說, 這兩者都不是一件簡單的工作, 所以在過去, 通常軟體開發者都必須是比較大型的公司才能順利經營。

139 特別企劃 軟體開發者與軟體使用者面臨的問題
使用者購買軟體之後, 通常會取得軟體光碟或是安裝檔, 使用者需自己安裝, 如果安裝上出現問題必須自行解決或是詢問軟體開發者。安裝完畢之後也常常無法立刻使用, 因為開發者為了避免盜版, 會要求使用者經輸入序號、線上啟用等步驟後才能使用軟體。這一長串的步驟下來, 經常讓使用者覺得花錢買罪受, 不如直接用盜版、破解版還比較省錢省事。

140 特別企劃 軟體開發者與軟體使用者面臨的問題 上述軟體開發者的困難, 及軟體使用者的不便, 正逐漸由手機上的軟體商店解決這些問題。

141 特別企劃 iPhone 的 App Store 蘋果公司推出 iPhone 之後大受歡迎, iPhone 除了令人驚豔的觸控功能, 另一項創舉則是 App Store (Application Store)。App Store 可說是蘋果公司經營的軟體商店, 雖然概念上並無創新之處, 但是實作出的機制卻同時解決過去軟體開發者與使用者所面臨的問題。

142 特別企劃 iPhone 的 App Store

143 特別企劃 App Store 對於軟體開發者的效應
對於軟體開發者而言, 只要通過蘋果公司的審核機制之後, 就可以將軟體上架於 App Store, 隨著每一支 iPhone 的售出, 等於是直接將軟體鋪貨到使用者面前, 軟體開發者不必再煩惱通路的問題, 而且 iPhone 行銷全球之後, 更是等於將軟體鋪貨到各個國家, 這是過去小型或個人開發者所無法達成的夢想。

144 特別企劃 App Store 對於軟體開發者的效應
此外 App Store 也為軟體開發者解決金流的問題, 使用者在 App Store 購買軟體時, 由蘋果公司處理使用者刷卡付費, 取得軟體購買的款項之後, 蘋果公司會扣除 30% 的處理費, 剩下的 70% 則轉交軟體開發者, 所以軟體開發者不必再費心建立線上刷卡機制。

145 特別企劃 App Store 對於軟體開發者的效應

146 特別企劃 App Store 對於軟體使用者的便利

147 特別企劃 App Store 對於軟體使用者的便利

148 特別企劃 App Store 對於軟體使用者的便利
除了方便的購買方式以外, 另一個提昇使用者購買意願的是便宜的軟體價格。過去因為軟體發行的困難度高、軟體購買量少, 所以軟體開發者必須一直增加軟體功能, 以便讓一套軟體可以用於多種用途, 一方面也藉此提高軟體單價, 因此過去軟體價格動則上千上萬, 但是使用者需要的功能常常不到 50%。

149 特別企劃 App Store 對於軟體使用者的便利

150 特別企劃 App Store 對於軟體使用者的便利
但是 App Store 降低了軟體發行的困難度, 也因為 iPhone 行銷全球而提高軟體購買量, 所以開發者可以提供便宜且單一功能的軟體, 目前 App Store 上大多數軟體都不超過美金 10 元(約新台幣 300 元), 甚至許多軟體的價格只要美金 0 .99、1.99 (約新台幣 30、60 元)。

151 特別企劃 App Store 對於軟體使用者的便利
對於使用者而言, 一杯飲料的費用就可以買到想要的軟體, 加上便利的購買方式, 相較於使用盜版還需要花費時間去尋找與破解, 多數使用者都願意直接購買正版軟體了。

152 特別企劃 App Store 對於軟體使用者的便利
因為 App Store 上便宜的軟體價格, 使用者購買軟體已經不再是一個需要審慎評估的消費, 即使買到不適用的軟體, 也就像是買到一杯不好喝的飲料, 不會因此心疼而不再購買軟體。而且對於很多人而言, 在 App Store 上購買軟體已經變成一種日常消費, 每天都會上 App Store 看看今天是否有新奇好用的軟體, 一種新的軟體購買習慣已經逐漸形成。

153 特別企劃 手機軟體商店的發展 App Store 可說是創造了軟體開發者、軟體使用者與蘋果公司三贏的經營平台, 而且產生了使用者願意購買軟體、開發者願意製作更多軟體的正向循環。雲端服務公司 Evernote 的總裁於 2011 年發表的文章可說是最好詮釋: 現在是軟體業最好的年代, 手機軟體商店打破了一些舊的行業慣例,我很高興我們不需要使用那些防止複製、包裝精美、定期收取更新費用的經營模式。

154 特別企劃 手機軟體商店的發展 除了 iPhone 的 App Store 以外, Google公司也於 Android 手機系統上推出 Android Market, 除了與 App Store 相同的便利機制以外, Google 也融入了其線上廣告的長處, 讓軟體開發者可以在軟體中嵌入線上廣告, 然後以免費的方式提供軟體給使用者, 如果使用者按下了廣告, 則可由 Google 與開發者共享廣告營收。

155 特別企劃 手機軟體商店的發展 這樣的方式更是創造使用者可以免費使用軟體、Google 與開發者也有營收、廣告業者還可以獲得宣傳機會的四贏機制。

156 特別企劃 PC 軟體商店的未來 在手機軟體商店成功發展之後, 蘋果公司於 2011 年也正式在 Mac 個人電腦上推出 App Store, 試圖將手機軟體商店的成功模式複製到 PC 上。此外, 也有許多人期待Windows 系統上也可以有類似的軟體商店平台。

157 特別企劃 PC 軟體商店的未來

158 特別企劃 PC 軟體商店的未來 不過 PC 軟體商店是否能成功發展仍在未定之天, 特別是 Windows 系統的個人電腦, 在多年的使用以來, 現有的商業與共享軟體業者已經有既定的發行或流通管道, 是否願意將軟體放入軟體商店, 讓平台經營者收取高額處理費, 將是各業者需要評估的重點,也將是 PC 軟體商店是否能成功的關鍵。


Download ppt "第 13 章 程式語言."

Similar presentations


Ads by Google