第一章 程式語言的演進

53
1 第第第第第第第 第第第 第第 [email protected] 第第第第第第

description

第一章 程式語言的演進. 陳維魁 博士 [email protected] 儒林圖書公司. 大綱. 程式語言的意義 程式語言的設計目標 程式語言的分類 各種語言的特性 高階語言的處理器 命令式語言與應用式語言 習題. 程式語言的意義. 由一組系統化的符號所成之集合,目的是表達某種機器解決特定問題的步驟 向計算機描述計算過程之工具. 程式語言的設計目標. 簡潔 (simplicity) 學習程式語言增進對程式語言的了解、改進程式設計的架構、增進執行效率、選擇適用的語言與設計新的語言. 程式語言的分類. 第一代程式語言 機器語言 - PowerPoint PPT Presentation

Transcript of 第一章 程式語言的演進

Page 1: 第一章  程式語言的演進

1

第一章 程式語言的演進

陳維魁 博士[email protected]

儒林圖書公司

Page 2: 第一章  程式語言的演進

2

大綱

程式語言的意義 程式語言的設計目標 程式語言的分類 各種語言的特性 高階語言的處理器 命令式語言與應用式語言 習題

Page 3: 第一章  程式語言的演進

3

程式語言的意義

由一組系統化的符號所成之集合,目的是表達某種機器解決特定問題的步驟

向計算機描述計算過程之工具

Page 4: 第一章  程式語言的演進

4

程式語言的設計目標

簡潔 (simplicity)

學習程式語言增進對程式語言的了解、改進程式設計的架構、增進執行效率、選擇適用的語言與設計新的語言

Page 5: 第一章  程式語言的演進

5

程式語言的分類 第一代程式語言

機器語言 第二代程式語言

組合語言 第三代程式語言

高階語言 第四代程式語言

極高階語言 第五代程式語言

自然語言

Page 6: 第一章  程式語言的演進

6

第一代程式語言 機器語言 (machine language) 指令與資料均由二進碼所組成 不需經由語言處理器直接在機器執行

Page 7: 第一章  程式語言的演進

7

第二代程式語言 組合語言 (assembly language) 組合語言的指令稱為助憶碼 (mnemonic

code) 指令種類

機器指令 (machine operation) 虛擬指令 (pseudo operation)

必需經由組譯程式 (assembler) 處理 與機器語言合稱為低階語言

Page 8: 第一章  程式語言的演進

8

第三代程式語言 高階語言 (high level language) 程序導向語言 (procedure oriented

language) 需要經過編譯或直譯程式 範例

Pascal C Basic Fortran Cobol

Page 9: 第一章  程式語言的演進

9

第四代程式語言 極高階語言 問題導向語言 (problem oriented

language) 範例

SQL (Structured Query Language)

Page 10: 第一章  程式語言的演進

10

第五代程式語言 自然語言 (nature language) 知識庫語言 (knowledge based

language) 語法接近人類日常生活的語言

Page 11: 第一章  程式語言的演進

11

各種語言的特性 Fortran Algol 60 Lisp Cobol APL Basic Snobol PL/1

Simula Algol 68 C Prolog Pascal ADA C++ JAVA

Page 12: 第一章  程式語言的演進

12

FORTRAN

FORmula TRANslator language 第一個高階語言 針對科學計算而設計 固定格式 首創輸出入格式化 (I/O format) 提供正、零、負三種 IF 分枝結構 提供 Do 迴圈控制結構 : 早期是後測迴圈 隱含性變數 : 不經宣告內定為整數型態

Page 13: 第一章  程式語言的演進

13

執行下列 Fortran 之部份程式並求出 K 值

K=-1 DO 400 I=1,5 IF(K) 100,200,300 正、零、負 100 K=K+5 GOTO 400 200 K=2*K+1 GOTO 400 300 K=4*K-2 400 CONTINUE

Page 14: 第一章  程式語言的演進

14

Fortran

共用區 (common area) 作用 處理方式

Page 15: 第一章  程式語言的演進

15

Algol 60

ALGOrithmic Language 發展於 1960 年代 無較大之贊助者 採自由格式 (free format) 首創採區塊結構 (block structure) 允許使用遞迴副程式 (recursive subroutine) 首創使用傳名呼叫法 (call by name) 傳遞參數

Page 16: 第一章  程式語言的演進

16

Algol 60

動態界限陣列 採外顯式 (explicit) 宣告 一個敘述中列出變數的名稱,並宣告他們所

屬的型態,稱為外顯式宣告 首創以保留字 (reserved word) 來定義資料型態

首創結構化程式設計的概念 首創以 B.N.F 來描述語法 (Algol 58 提出 )

Page 17: 第一章  程式語言的演進

17

結構化程式設計

structured programming 把一個大的問題 , 依照邏輯上的特性 , 往下細分成幾個小的問題 , 再把這幾個小的問題 , 依照邏輯的特性 , 再往下細分成更小的問題 , 依此類推 , 直到很容易編寫程式的單元時為止

Page 18: 第一章  程式語言的演進

18

結構化程式設計

基本結構 循序結構 選擇結構 反覆結構

避免使用 GOTO ,破壞程式的可讀性及結構性

Page 19: 第一章  程式語言的演進

19

結構化程式設計

優點可以分工可讀性高 容易維護 易除錯

缺點 程式碼會變長 執行時間較長

Page 20: 第一章  程式語言的演進

20

PASCAL

紀念法國數學家 Blaise Pascal 1975 年發展完成,由 IBM 贊助 提供指標、集合資料型態、紀錄資料型態 允許自訂資料型態 傳值和傳址呼叫 採區塊結構 具嚴謹語法結構,適合教學用途

Page 21: 第一章  程式語言的演進

21

LISP LISt Processing language 1950 年代末期由麻省理工學院發展 S運算式 (S expression)

原子 ( atom ) : 包含符號 ( symbol ) 及數值 ( number ) 。 串列 ( list ) : 則是以小括號括起來的一串資料。

利用垃圾收集法 (garbage collection) 來管理記憶體 使用於人工智慧 (Artificial Intelligence) 之應用,稱為人工智慧的低階語言

劍橋波蘭式 (Cambridge polish notation) 所謂「 S- 表達式」或「 sexp 」(其中「 S 」代表「符號的」),是指一種以人

類可讀的文本形式表達半結構化數據的約定

Page 22: 第一章  程式語言的演進

22

Garbage collection

系統會主動的回收 , 程式不再使用的記憶體空間

範例 Small talk JAVA LISP

Page 23: 第一章  程式語言的演進

23

SNOBOL

StriNg Oriented symBOlic Language 貝爾實驗室於 1960 年代中期發展 具字樣配對 (pattern matching) 能力 具字串處理能力 (string manipulating) 型樣資料型態 (pattern data type)

Page 24: 第一章  程式語言的演進

24

PL/1

Programming Language /1 IBM 於 1960 年代中期設計 綜合 Fortran,Cobol 與 Algol 60 之特性 首創

例外處理 (exception handling) 指標 (pointer) 資料型態 以維也納定義語言 (Vienna Definition Language) 來描述

語意 採區塊結構 提供遞迴呼叫 (recursive call) 的功能 多重任務 (multi-tasking

Page 25: 第一章  程式語言的演進

25

Cobol

COmmon Business Oriental Language 發展於 1960 ~ 1970 年代 , 由美國防部贊助 主要用於商業資料處理,能處理大量資料輸出入 缺乏複雜的數學計算能力 具 IF-THEN-ELSE 敘述 語法傾向自然語言 (natural language) 雜訊字 (noise word) 增加可讀性 go to只處理

go 不處理 to 首創與機器無關的資料描述方式 (data division)

Page 26: 第一章  程式語言的演進

26

COBOL

資料描述方式 IDENTIFICATION DIVISION ENVIRONMENT DIVISION DATA DIVISION PROCEDURE DIVISION

Page 27: 第一章  程式語言的演進

27

Algol W

使用數值結果呼叫法 (call by value result) 傳遞參數

首創 case敘述

提供記錄 (record) 與指標 (pointer) 結構

Page 28: 第一章  程式語言的演進

28

Algol 68

參數的傳遞採用數值結果呼叫法 提供記錄與指標資料型態 首先提供使用者自行定義資料型態的功能

Page 29: 第一章  程式語言的演進

29

APL

A Programming Language 擅長數學計算。 採不標準字元集。 允許陣列整體運算。 提供指標 (pointer) 型態。 提供集合 (set) 資料型態。〔首創〕 提供記錄 (record) 資料型態。 提供 case 結構。 允許使用者自定資料型態。 採傳值呼叫法與傳址呼叫法傳遞參數

Page 30: 第一章  程式語言的演進

30

SIMULA

發展於 1960 年代後期 首創資料抽象化 (data abstraction) 類別 (class)

Page 31: 第一章  程式語言的演進

31

C

貝爾實驗室於 1970 年代發展 採區塊結構 可攜性高 適合發展系統程式 具 Self-compiled 特性

編譯程式大部分以 C 寫成 可呼叫組合語言

Page 32: 第一章  程式語言的演進

32

C++

Bjarne Stroustrup 設計,在貝爾實驗室中發展 主要目標

實現物件導向程式設計理想 採用區塊結構 適合發展系統程式 高可攜性 高機器獨立性(machine independent) 區分大小寫 識別字由大小寫英文字母,數字或底線所構成,但第一個字元不得為數字

Page 33: 第一章  程式語言的演進

33

BASIC

Beginner's All-purpose Symbolic Instruction Code

1960 年代中期發展 交談式 (interactive) 語言 適合程式發展初期使用 利用解譯器 (interpreter) 處理程式

Page 34: 第一章  程式語言的演進

34

Prolog

PROgramming LOGic Alan Colmeraure 於 1970 年代初期發展 適用於人工智慧之應用 邏輯式程式語言 人工智慧的高階語言 1982 年日本宣佈以 Prolog 為第五代電腦之發展語言

Page 35: 第一章  程式語言的演進

35

ADA

紀念 Augusta ADA Byron 美國防部發展 主要運用於國防需求 提供

資料抽象化 例外處理平行處理

Page 36: 第一章  程式語言的演進

36

RPG

Report Program Generator 由 IBM 發展 主要用作大量報表之產生

Page 37: 第一章  程式語言的演進

37

GPSS

General Purpose Simulation System

主要用於模擬 (Simulation)

Page 38: 第一章  程式語言的演進

38

PILOT

Programmed Inquiry Learning Or Teaching

主要應用於電腦輔教學 (Computer Aided Instruction)

可幫助教師編寫教材

Page 39: 第一章  程式語言的演進

39

FORTH

設計的目標是為了提供對電腦的記憶體及速度作最佳之運用

Page 40: 第一章  程式語言的演進

40

MODULA-2

由 Wirth 發展出來,適用於系統軟體之開發

Page 41: 第一章  程式語言的演進

41

JAVA

Sun Microsystems 所發展 名稱之命名是源於突發的靈感 物件導向程式語言,以 class 為基本架構 垃圾收集法 (garbage collection) Multithread 例外 (exception) 處理能力 取消

指標 (pointer) 資料型態 多重繼承 (multiple inheritance) 運算子覆載 (operator overloading)

Page 42: 第一章  程式語言的演進

42

JAVA

Byte Code可在不同的機器平台上移植,待要執行時,再

由 JAVA 的直譯器 (interpreter) 處理此 Byte Code即可

允許程式段能夠透過網路系統到另一個機器平台上執行

JAVA 語言比 C 語言具有更高的可攜性 目前在 Windows NT, Windows 95,

Macintosh, SUN, Linux等開發平台上已有的直譯程式可供使用。

Page 43: 第一章  程式語言的演進

43

高階語言的處理器 作用

將利用高階語言寫成的程式段翻譯成機器可接受的碼。

種類 編譯器 (compiler)

對原始程式碼中的每一條敘述,按照先後順序做一次之處理,並產生對應的目的碼

直譯器 (interpreter) 對原始程式碼中的敘述,按照執行的先後順序做處理,並直接產生程式執行結果

Page 44: 第一章  程式語言的演進

44

編譯器及直譯器的比較 輸入 都用高階語言 輸出 直 : 執行結果 編 : 目的碼 時間 直 : 長 編 : 短 空間 直 : 少 編 : 多 除錯特性 都佳 彈性 直 : 較差 編 : 較佳 適合階段 直 : 開發初期 編 : 開發後期 範例 直 :Basic Lisp Prolog APL編 : Pascal C C++ Cobol Fortran Ada

Page 45: 第一章  程式語言的演進

45

命令式語言 imperative

藉著改變變數之內容以做為控制程式執行的方法 範例

Fortran Cobol Basic Algol Pascal PL/1 C C++ ….

Page 46: 第一章  程式語言的演進

46

應用式語言 applicative

語言藉著函數來表達。因此輸入將作為函數的參數而輸出則為函數的值

範例 Lisp APL Snobol

Page 47: 第一章  程式語言的演進

1. 分別寫出最先引進下列各項概念的程式語言: (a) 區段結構 (block structure) 。 (b) 輸出入格式 (input/output format) 。 (c) 雜訊字 (noise words) 。 (d) 程式定義的特殊條件 (program defined exception condition)

。 (e) 抽象資料型態 (abstract data type) 。

(a) Algol 60 。 (b) Fortran 。 (c) Cobol 。 (d) PL/1 。 (e) SIMULA 。

47

Page 48: 第一章  程式語言的演進

下列十四種重要程式語言,均為有重要特色的:ADA, Algol 60, Algol 68, APL, Basic, C, Cobol, Lisp, Fortran, Modula 2, Pascal, PL/1, Prolog, Snobol試據以回答下列各下題:

(1) 最早發展出來而廣泛應用的程式語言為 。 (2) 美國國防部採用來作為融入式 (embedded) 系統之標準程式語言為

。 (3) 最早為人工智慧所設計的程式語言為 。 (4) 對於程式語言所設計觀念上影響最大的早期程式語言是 。 (5) 由 IBM 公司推出之泛用程式語言是 。 (6) 為字串處理而設計的程式語言是 。

(1) Fortran ( 強調科學計算 ) (2) Ada (3) Lisp (4) Algol 60 (Block structure 的觀念 ) (5) PL/1 (6) Snobol

48

Page 49: 第一章  程式語言的演進

何謂外顯式型態法 (explicit typing)?何謂內隱式型態法 (implicit typing)?

外顯式型態法是指符號在使用前必須先定義,內隱式型態法則是指符號在使用前不必先定義。

49

Page 50: 第一章  程式語言的演進

程式語言常見的設計準則為何?

(1) 語法 (syntax) 及語意 (semantics)定義必須明確。

(2) 高可靠性。 (3) 快速翻譯 (4) 具機器獨立性。 (5) 最佳化的目的碼,藉以加快執行速

度。

50

Page 51: 第一章  程式語言的演進

程式設計 (design)與撰寫(coding)有何不同?

程式設計是指根據使用者需求設計出演算法 (algorithm) ,而撰寫則是依照演算法並挑選適當的程式語言,根據該程式語言的語法編寫出程式段。

51

Page 52: 第一章  程式語言的演進

近代程式語言應有那些主要特性?

(1) 程式的結構為塊狀結構 (block structure) 。

(2) 應具有型態及型態檢驗 (type checking)的功能;可利用此項功能來判斷變數的型態是否合法。

(3) 變數的領域範圍,有一定的規則來處理( 如靜態領域規則與動態領域規則 ) 。

(4) 命令式語言。 (5) 程式須經過語言處理器的處理才能執行。

52

Page 53: 第一章  程式語言的演進

程式語言直譯式和編譯式有何差異 輸入 都用高階語言 輸出 直 : 執行結果 編 : 目的碼 時間 直 :長 編 :短 空間 直 :少 編 :多 除錯特性 都佳 彈性 直 : 較差 編 : 較佳 適合階段 直 :開發初期 編 :開發後期 範例 直 :Basic Lisp Prolog APL編 : Pascal C C++ Cobol Fortran Ada

53