計概:Programming Paradigm

47
程式語類型 (Programming Paradigm)

Transcript of 計概:Programming Paradigm

Page 1: 計概:Programming Paradigm

程式語⾔言類型 (Programming Paradigm)

Page 2: 計概:Programming Paradigm

Let it go

Page 3: 計概:Programming Paradigm

語⾔言

Page 4: 計概:Programming Paradigm
Page 5: 計概:Programming Paradigm

Fortran Matlab Octave Bigwig TUTOR BASIC BCPL

C C++

COBOL Haskell

Java Mercury

Objective-C Pascal

Scheme

Swift Ada

Chapel Eiffel Go

Joule Limbo

MultiLisp Orc Oz Pict Rust

SALSA Scala

SequenceL C#

Candle ChucK

Cyclone ActionScript

Frink LPC MSL MEL

PCASTL Perl PHP Pico Pike

R Rust

S-Lang

Scala sed

SuperCollider TCL

UnrealScript Lucid Max Oz

Prograph Pure Data Reaktor

VEE VHDL VisSim Clarion Clipper

RDQL SPARQL

SQL WebDNA WebQL Lustre

MetaPost Modelica

Prolog Oz

RDQL SPARQL

SQL xBase Ruby EEL

Page 6: 計概:Programming Paradigm

程序式類型〔procedural paradigm;或規則式類型(imperative paradigm)〕可將程式視為主動的代理⼈人,能主動處理被動的物件。被動的物件無法⾃自⾏行啟動,但可以接受主動代理⼈人發出的動作。在程序式類型中的程式是屬於主動代理⼈人,將資料或資料項視為被動的物件。資料項被儲存於電腦的記憶體中,以供程式處理。

程序式類型 (Procedural Paradigm)

(英⽂文版)252

Page 7: 計概:Programming Paradigm

程式(program)是主動的⼈人(active agent) 資料(data)是被動的物(passive object) 程式呼叫(call)程序(procedural)來影響資料(data) 程式(program)、程序(procedure)和資料(data)是分開的

當⼀一個程式想要影響⼀一個資料時,這個程式會發出⼀一個程序,⽽而這個程序包含影響資料所需的動作

程序式類型 (Procedural Paradigm)

(英⽂文版)252

Page 8: 計概:Programming Paradigm

程式(program)是主動的⼈人(active agent) 資料(data)是被動的物(passive object) 程式呼叫(call)程序(procedural)來影響資料(data) 程式(program)、程序(procedure)和資料(data)是分開的

當⼀一個程式想要影響⼀一個資料時,這個程式會發出⼀一個程序,⽽而這個程序包含影響資料所需的動作

⼈人 洗 碗

程序式類型 (Procedural Paradigm)

(英⽂文版)252程式 程序 資料

Page 9: 計概:Programming Paradigm

程序式類型 (Procedural Paradigm)

(英⽂文版)253

Page 10: 計概:Programming Paradigm

程序式類型 (Procedural Paradigm)

(英⽂文版)253

上檔(段數) { 段數 + 1 }

Page 11: 計概:Programming Paradigm

程序式類型 (Procedural Paradigm)

(英⽂文版)253

上檔(段數) { 段數 + 1 }

程序: 上檔功能

被影響的資料:段數

Page 12: 計概:Programming Paradigm

程序式類型 (Procedural Paradigm)

(英⽂文版)253

Ubike段數 = 2 Ubike換檔程式 { 上檔(Ubike段數) }

上檔(段數) { 段數 + 1 }

程序

被影響的資料

Page 13: 計概:Programming Paradigm

程序式類型 (Procedural Paradigm)

Ubike段數 = 2 Ubike換檔程式 { 上檔(Ubike段數) }

上檔(段數) { 段數 + 1 }

程序

被影響的資料

呼叫程序

程式資料

(英⽂文版)253

Page 14: 計概:Programming Paradigm

程序式類型 (Procedural Paradigm)

Ubike段數 = 2 Ubike換檔程式 { 上檔(Ubike段數) }

折疊⾞車⾞車段數 = 2 折疊⾞車換檔程式 { 上檔(折疊⾞車段數) }

都市⾞車段數 = 2 都市⾞車換檔程式 { 上檔(都市⾞車段數) }

同個程序可以拿來影響不同資料

(英⽂文版)253

Page 15: 計概:Programming Paradigm

程序式類型 (Procedural Paradigm)

Ubike段數 = 2 Ubike換檔程式 { 上檔(Ubike段數) }

折疊⾞車段數 = 2 折疊⾞車換檔程式 { 上檔(折疊⾞車段數) }

都市⾞車段數 = 2 都市⾞車換檔程式 { 上檔(都市⾞車段數) }

同個程序可以拿來影響不同資料

(英⽂文版)253

Page 16: 計概:Programming Paradigm

程序式類型 (Procedural Paradigm)

上檔(段數) { 段數 + 1 }

(英⽂文版)253

Page 17: 計概:Programming Paradigm

程序式類型 (Procedural Paradigm)

上檔(段數) { 段數 + 1 }

呼叫程序 加法(段數, 1)

(英⽂文版)253

Page 18: 計概:Programming Paradigm

程序式類型 (Procedural Paradigm)

(英⽂文版)254

Page 19: 計概:Programming Paradigm

程序式類型 (Procedural Paradigm)

腳踏⾞車段數 = 2 腳踏⾞車換檔程式 { 上檔(腳踏⾞車段數) }

上檔(段數) { 段數 + 1 }

(英⽂文版)254

Page 20: 計概:Programming Paradigm

程序式類型 (Procedural Paradigm)

FORTRAN(FORmula TRANslation) ⽅方程式轉譯程式語⾔言,第⼀一個⾼高階語⾔言

COBOL(COmmon Business-Oriented Language) 共通商業導向程式語⾔言,商業程式設計語⾔言

Pascal 教導初學者結構化程式設計的⽅方法

C(C language) 寫作業系統與系統軟體

Ada 美國國防部承包商所使⽤用的統⼀一語⾔言

(英⽂文版)254

Page 21: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

(英⽂文版)256

物件導向式類型(object-oriented paradigm)以處理主動物件取代被動物件。在⽇日常⽣生中我們經常碰到許多主動物件,執⾏行在這些物件上的動作都被包含於物件裡,所以物件僅需要接收外界傳來的適當刺激,就會去執⾏行相關的某個動作。 物件導向式類型的檔案中會包含所有的程序,稱為⽅方法(methods),也就是會對檔案執⾏行的動作:列印、複製、刪除等。

Page 22: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

(英⽂文版)256

資料(data)是主動的物(active object) 資料(data)包含所有能夠影響資料本⾝身的程序(procedure) 包含在資料(data)裡的程序(procedure)稱為⽅方法(method) 包含⽅方法(method)的資料(data)稱為物件(object) 程式(program)觸發物件(object)裡的⽅方法(method)

當⼀一個程式想要影響⼀一個物件時,這個程式觸發這個物件裡的⽅方法

Page 23: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

(英⽂文版)256

Page 24: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

(英⽂文版)256

物件 Ubike { Ubike段數 上檔(Ubike段數) { Ubike段數 + 1 } }

Ubike換檔程式 { Ubike.上檔 }

Page 25: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

(英⽂文版)256

物件 Ubike { Ubike段數 = 2 上檔(Ubike段數) { Ubike段數 + 1 } }

Ubike換檔程式 { Ubike.上檔 }

資料⽅方法

物件

Page 26: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

腳踏⾞車

單速⾞車登⼭山越野⾞車

淑⼥女⾞車

UBike

折疊⾞車 競速⾞車都市⾞車

類別

物件(英⽂文版)257

同個類別(class)的物件可以全部⼀一起在類別定義

Page 27: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

物件 Ubike { Ubike段數 上檔(Ubike段數) { Ubike段數 + 1 } }

(英⽂文版)257

同個類別(class)的內容可以全部⼀一起定義

Page 28: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

類別 腳踏⾞車 { 腳踏⾞車段數 上檔(腳踏⾞車段數) { 腳踏⾞車段數 + 1 } }

(英⽂文版)257腳踏⾞車物件 Ubike

類別

同個類別(class)的內容可以全部⼀一起定義

Page 29: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

類別 腳踏⾞車 { 腳踏⾞車段數 上檔(腳踏⾞車段數) { 腳踏⾞車段數 + 1 } }

同個類別(class)的內容可以全部⼀一起定義Ubike換檔程式 { Ubike.上檔 }折疊⾞車換檔程式 { 折疊⾞車.上檔 }都市⾞車換檔程式 { 都市⾞車.上檔 }

(英⽂文版)257

腳踏⾞車物件 Ubike 腳踏⾞車物件 折疊⾞車 …

類別

Page 30: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

類別 腳踏⾞車 { 腳踏⾞車段數 上檔(腳踏⾞車段數) { 腳踏⾞車段數 + 1 } }

(英⽂文版)257

同個類別(class)的內容可以全部⼀一起定義

Page 31: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

(英⽂文版)257

⼀一個類別可以繼承(inherit)另⼀一個類別

⾞車⼦子類別

汽⾞車機⾞車

卡⾞車 腳踏⾞車 類別

Page 32: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

類別 腳踏⾞車 { 腳踏⾞車段數 上檔(腳踏⾞車段數) { 腳踏⾞車段數 + 1 } }

(英⽂文版)257

⼀一個類別可以繼承(inherit)另⼀一個類別

Page 33: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

(英⽂文版)257

類別 ⾞車 { ⾞車段數 上檔(⾞車段數) { ⾞車段數 + 1 } }

類別 腳踏⾞車 繼承 ⾞車(英⽂文版)257

⼀一個類別可以繼承(inherit)另⼀一個類別

Page 34: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

(英⽂文版)257

類別 ⾞車 { ⾞車段數 上檔(⾞車段數) { ⾞車段數 + 1 } } 類別 腳踏⾞車 繼承 ⾞車

Ubike換檔程式 { Ubike.上檔 }折疊⾞車換檔程式 { 折疊⾞車.上檔 }都市⾞車換檔程式 { 都市⾞車.上檔 }

腳踏⾞車物件 Ubike 腳踏⾞車物件 折疊⾞車 …

⼀一個類別可以繼承(inherit)另⼀一個類別

Page 35: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

(英⽂文版)257

⾞車⼦子

汽⾞車機⾞車

卡⾞車 腳踏⾞車

繼承同個類別的不同類別可以有多樣性 (Polymorphism) 同樣的名字的⽅方法(method)可以做不同的事

Page 36: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

(英⽂文版)257

繼承同個類別的不同類別可以有多樣性 (Polymorphism) 同樣的名字的⽅方法(method)可以做不同的事

⾞車⼦子

類別 腳踏⾞車 { 警⽰示聲() { 敲擊⾦金屬鈴鐺 } }

類別 卡⾞車 { 警⽰示聲() { 鳴喇叭 } }

Page 37: 計概:Programming Paradigm

物件導向式類型 (object-oriented paradigm)

(英⽂文版)258

C++ 由C演變⽽而來,C加上物件導向概念的延伸版

Java 由C++演變⽽而來,完全物件導向式的語⾔言

Page 38: 計概:Programming Paradigm

函式類型 (Functional Paradigm)

(英⽂文版)258

增加⼀一(x) = x + 1

2 + 1增加⼀一(2) = 2

Page 39: 計概:Programming Paradigm

函式類型 (Functional Paradigm)

(英⽂文版)259

函式類型 在函式類型(functional paradigm)中的程式被視為數學函式。將函式(function)視為⼀一個⿊黑箱,有⼀一串輸⼊入與⼀一串輸出。 1. 預先定義⼀一組基本(不可分割的)函式,可以讓任何程式 設計師使⽤用。

2. 允許程式設計師合併基本的函式,產⽣生新的函式。

Page 40: 計概:Programming Paradigm

函式類型 (Functional Paradigm)

先定義⼀一組不可分割的基本函式增加⼀一(x) = x + 1 減少⼀一(x) = x - 1

允許使⽤用基本函式合成新的函式增加⼆二(x) = 增加⼀一(增加⼀一(x)) 減少⼆二(x) = 減少⼀一(減少⼀一(x))

(英⽂文版)259

Page 41: 計概:Programming Paradigm

函式類型 (Functional Paradigm)

找出數列中排第三個數的值

(英⽂文版)259

先定義⼀一組不可分割的基本函式First(數列) = 取數列中排第⼀一個數的值 Rest(數列) = 刪掉數列中排第⼀一個的數

允許使⽤用基本函式合成新的函式

Third(數列) = First(Rest(Rest(數列)))

Page 42: 計概:Programming Paradigm

函式類型 (Functional Paradigm)

(英⽂文版)259

LSIP 專⾨門處理數列的語⾔言

Scheme LISP的改良版

Page 43: 計概:Programming Paradigm

函式類型 vs 程序式類型

(英⽂文版)259

Ubike段數 = 2 Ubike換檔程式 { 上檔(Ubike段數) }

上檔(Ubike段數) { Ubike段數 + 1 }

上檔(Ubike段數) { 增加⼀一(Ubike段數) }

函式類型 程序式類型

Page 44: 計概:Programming Paradigm

宣告式類型 (Declarative Paradigm)

宣告式語⾔言(declarative language)使⽤用邏輯推論的原理來回覆查詢。⼀一些給定的敘述(事實)被假設為真,使⽤用邏輯推論的規則去演繹出新的敘述(事實)。

類似函式類型,先從⼀一些確定的事實,推論到其他事實 如果 (A 是 B) 且 (B 是 C) => (A 是 C)

(Ubike是腳踏⾞車) 且 (腳踏⾞車是⾞車) => (Ubike是⾞車)

(英⽂文版)260

Page 45: 計概:Programming Paradigm

宣告式類型 (Declarative Paradigm)

宣告式語⾔言是⽤用既定的已知事實套上嚴謹的邏輯定律來進⾏行推論,他是建⽴立在⼀一⾨門很專⾨門的學問(就叫做邏輯)上,利⽤用從各個領域得到的各種確定事實,套上由這個學問領域的邏輯學家導出的邏輯定律,來從確定事實推導出新的事實

反例:(A 是 C) 且 (B 是 C) =>? (A 是 B)

(英⽂文版)260

Page 46: 計概:Programming Paradigm

宣告式類型 (Declarative Paradigm)

(英⽂文版)260

宣告式語⾔言是⽤用既定的已知事實套上嚴謹的邏輯定律來進⾏行推論,他是建⽴立在⼀一⾨門很專⾨門的學問(就叫做邏輯)上,利⽤用從各個領域得到的各種確定事實,套上由這個學問領域的邏輯學家導出的邏輯定律,來從確定事實推導出新的事實

反例:(A 是 C) 且 (B 是 C) =>? (A 是 B) NO (法拉利是⾞車) 且 (藍寶基尼是⾞車) !=> (法拉利是藍寶基尼)

Page 47: 計概:Programming Paradigm

宣告式類型 (Declarative Paradigm)

(英⽂文版)261

Prolog (PROgramming in LOGic) 範例:

腳踏⾞車 (Ubike) ⾞車 (腳踏⾞車)

?-⾞車 (腳踏⾞車)

>> Yes

告訴電腦已知事實

詢問此邏輯是否成⽴立