KEMBAR78
計概:Programming Paradigm | PDF
程式語⾔言類型
(Programming Paradigm)
Let it go
語⾔言
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
程序式類型〔procedural paradigm;或規則式類型
(imperative paradigm)〕可將程式視為主動的代理
⼈人,能主動處理被動的物件。被動的物件無法⾃自⾏行啟
動,但可以接受主動代理⼈人發出的動作。在程序式類
型中的程式是屬於主動代理⼈人,將資料或資料項視為
被動的物件。資料項被儲存於電腦的記憶體中,以供
程式處理。
程序式類型 (Procedural Paradigm)
(英⽂文版)252
程式(program)是主動的⼈人(active agent)
資料(data)是被動的物(passive object)
程式呼叫(call)程序(procedural)來影響資料(data)
程式(program)、程序(procedure)和資料(data)是分開的
當⼀一個程式想要影響⼀一個資料時,這個程式會發出⼀一個程
序,⽽而這個程序包含影響資料所需的動作
程序式類型 (Procedural Paradigm)
(英⽂文版)252
程式(program)是主動的⼈人(active agent)
資料(data)是被動的物(passive object)
程式呼叫(call)程序(procedural)來影響資料(data)
程式(program)、程序(procedure)和資料(data)是分開的
當⼀一個程式想要影響⼀一個資料時,這個程式會發出⼀一個程
序,⽽而這個程序包含影響資料所需的動作
⼈人 洗 碗
程序式類型 (Procedural Paradigm)
(英⽂文版)252
程式 程序 資料
程序式類型 (Procedural Paradigm)
(英⽂文版)253
程序式類型 (Procedural Paradigm)
(英⽂文版)253
上檔(段數)
{
段數 + 1
}
程序式類型 (Procedural Paradigm)
(英⽂文版)253
上檔(段數)
{
段數 + 1
}
程序:
上檔功能
被影響的資料:段數
程序式類型 (Procedural Paradigm)
(英⽂文版)253
Ubike段數 = 2
Ubike換檔程式
{
上檔(Ubike段數)
}
上檔(段數)
{
段數 + 1
}
程序
被影響的資料
程序式類型 (Procedural Paradigm)
Ubike段數 = 2
Ubike換檔程式
{
上檔(Ubike段數)
}
上檔(段數)
{
段數 + 1
}
程序
被影響的資料
呼叫程序
程式
資料
(英⽂文版)253
程序式類型 (Procedural Paradigm)
Ubike段數 = 2
Ubike換檔程式
{
上檔(Ubike段數)
}
折疊⾞車⾞車段數 = 2
折疊⾞車換檔程式
{
上檔(折疊⾞車段數)
}
都市⾞車段數 = 2
都市⾞車換檔程式
{
上檔(都市⾞車段數)
}
同個程序可以拿來影響不同資料
(英⽂文版)253
程序式類型 (Procedural Paradigm)
Ubike段數 = 2
Ubike換檔程式
{
上檔(Ubike段數)
}
折疊⾞車段數 = 2
折疊⾞車換檔程式
{
上檔(折疊⾞車段數)
}
都市⾞車段數 = 2
都市⾞車換檔程式
{
上檔(都市⾞車段數)
}
同個程序可以拿來影響不同資料
(英⽂文版)253
程序式類型 (Procedural Paradigm)
上檔(段數)
{
段數 + 1
}
(英⽂文版)253
程序式類型 (Procedural Paradigm)
上檔(段數)
{
段數 + 1
}
呼叫程序 加法(段數, 1)
(英⽂文版)253
程序式類型 (Procedural Paradigm)
(英⽂文版)254
程序式類型 (Procedural Paradigm)
腳踏⾞車段數 = 2
腳踏⾞車換檔程式
{
上檔(腳踏⾞車段數)
}
上檔(段數)
{
段數 + 1
}
(英⽂文版)254
程序式類型 (Procedural Paradigm)
FORTRAN(FORmula TRANslation)
⽅方程式轉譯程式語⾔言,第⼀一個⾼高階語⾔言
COBOL(COmmon Business-Oriented Language)
共通商業導向程式語⾔言,商業程式設計語⾔言
Pascal
教導初學者結構化程式設計的⽅方法
C(C language)
寫作業系統與系統軟體
Ada
美國國防部承包商所使⽤用的統⼀一語⾔言
(英⽂文版)254
物件導向式類型 (object-oriented paradigm)
(英⽂文版)256
物件導向式類型(object-oriented paradigm)以處
理主動物件取代被動物件。在⽇日常⽣生中我們經常碰
到許多主動物件,執⾏行在這些物件上的動作都被包
含於物件裡,所以物件僅需要接收外界傳來的適當
刺激,就會去執⾏行相關的某個動作。 物件導向式類
型的檔案中會包含所有的程序,稱為⽅方法
(methods),也就是會對檔案執⾏行的動作:列
印、複製、刪除等。
物件導向式類型 (object-oriented paradigm)
(英⽂文版)256
資料(data)是主動的物(active object)
資料(data)包含所有能夠影響資料本⾝身的程序(procedure)
包含在資料(data)裡的程序(procedure)稱為⽅方法(method)
包含⽅方法(method)的資料(data)稱為物件(object)
程式(program)觸發物件(object)裡的⽅方法(method)
當⼀一個程式想要影響⼀一個物件時,這個程式觸發這個物件
裡的⽅方法
物件導向式類型 (object-oriented paradigm)
(英⽂文版)256
物件導向式類型 (object-oriented paradigm)
(英⽂文版)256
物件 Ubike
{
Ubike段數
上檔(Ubike段數)
{
Ubike段數 + 1
}
}
Ubike換檔程式
{
Ubike.上檔
}
物件導向式類型 (object-oriented paradigm)
(英⽂文版)256
物件 Ubike
{
Ubike段數 = 2
上檔(Ubike段數)
{
Ubike段數 + 1
}
}
Ubike換檔程式
{
Ubike.上檔
}
資料
⽅方法
物件
物件導向式類型 (object-oriented paradigm)
腳踏⾞車
單速⾞車
登⼭山越野⾞車
淑⼥女⾞車
UBike
折疊⾞車 競速⾞車
都市⾞車
類別
物件
(英⽂文版)257
同個類別(class)的物件可以全部⼀一起在類別定義
物件導向式類型 (object-oriented paradigm)
物件 Ubike
{
Ubike段數
上檔(Ubike段數)
{
Ubike段數 + 1
}
}
(英⽂文版)257
同個類別(class)的內容可以全部⼀一起定義
物件導向式類型 (object-oriented paradigm)
類別 腳踏⾞車
{
腳踏⾞車段數
上檔(腳踏⾞車段數)
{
腳踏⾞車段數 + 1
}
}
(英⽂文版)257腳踏⾞車物件 Ubike
類別
同個類別(class)的內容可以全部⼀一起定義
物件導向式類型 (object-oriented paradigm)
類別 腳踏⾞車
{
腳踏⾞車段數
上檔(腳踏⾞車段數)
{
腳踏⾞車段數 + 1
}
}
同個類別(class)的內容可以全部⼀一起定義
Ubike換檔程式
{
Ubike.上檔
}
折疊⾞車換檔程式
{
折疊⾞車.上檔
}
都市⾞車換檔程式
{
都市⾞車.上檔
}
(英⽂文版)257
腳踏⾞車物件 Ubike
腳踏⾞車物件 折疊⾞車
…
類別
物件導向式類型 (object-oriented paradigm)
類別 腳踏⾞車
{
腳踏⾞車段數
上檔(腳踏⾞車段數)
{
腳踏⾞車段數 + 1
}
}
(英⽂文版)257
同個類別(class)的內容可以全部⼀一起定義
物件導向式類型 (object-oriented paradigm)
(英⽂文版)257
⼀一個類別可以繼承(inherit)另⼀一個類別
⾞車⼦子類別
汽⾞車
機⾞車
卡⾞車
腳踏⾞車 類別
物件導向式類型 (object-oriented paradigm)
類別 腳踏⾞車
{
腳踏⾞車段數
上檔(腳踏⾞車段數)
{
腳踏⾞車段數 + 1
}
}
(英⽂文版)257
⼀一個類別可以繼承(inherit)另⼀一個類別
物件導向式類型 (object-oriented paradigm)
(英⽂文版)257
類別 ⾞車
{
⾞車段數
上檔(⾞車段數)
{
⾞車段數 + 1
}
}
類別 腳踏⾞車 繼承 ⾞車
(英⽂文版)257
⼀一個類別可以繼承(inherit)另⼀一個類別
物件導向式類型 (object-oriented paradigm)
(英⽂文版)257
類別 ⾞車
{
⾞車段數
上檔(⾞車段數)
{
⾞車段數 + 1
}
}
類別 腳踏⾞車 繼承 ⾞車
Ubike換檔程式
{
Ubike.上檔
}
折疊⾞車換檔程式
{
折疊⾞車.上檔
}
都市⾞車換檔程式
{
都市⾞車.上檔
}
腳踏⾞車物件 Ubike
腳踏⾞車物件 折疊⾞車
⼀一個類別可以繼承(inherit)另⼀一個類別
物件導向式類型 (object-oriented paradigm)
(英⽂文版)257
⾞車⼦子
汽⾞車
機⾞車
卡⾞車
腳踏⾞車
繼承同個類別的不同類別可以有多樣性 (Polymorphism)
同樣的名字的⽅方法(method)可以做不同的事
物件導向式類型 (object-oriented paradigm)
(英⽂文版)257
繼承同個類別的不同類別可以有多樣性 (Polymorphism)
同樣的名字的⽅方法(method)可以做不同的事
⾞車⼦子
類別 腳踏⾞車
{
警⽰示聲()
{
敲擊⾦金屬鈴鐺
}
}
類別 卡⾞車
{
警⽰示聲()
{
鳴喇叭
}
}
物件導向式類型 (object-oriented paradigm)
(英⽂文版)258
C++
由C演變⽽而來,C加上物件導向概念的延伸版
Java
由C++演變⽽而來,完全物件導向式的語⾔言
函式類型 (Functional Paradigm)
(英⽂文版)258
增加⼀一(x) = x + 1
2 + 1增加⼀一(2) = 2
函式類型 (Functional Paradigm)
(英⽂文版)259
函式類型 在函式類型(functional paradigm)中
的程式被視為數學函式。將函式(function)視為
⼀一個⿊黑箱,有⼀一串輸⼊入與⼀一串輸出。
1. 預先定義⼀一組基本(不可分割的)函式,可以
讓任何程式 設計師使⽤用。
2. 允許程式設計師合併基本的函式,產⽣生新的函
式。
函式類型 (Functional Paradigm)
先定義⼀一組不可分割的基本函式
增加⼀一(x) = x + 1
減少⼀一(x) = x - 1
允許使⽤用基本函式合成新的函式
增加⼆二(x) = 增加⼀一(增加⼀一(x))
減少⼆二(x) = 減少⼀一(減少⼀一(x))
(英⽂文版)259
函式類型 (Functional Paradigm)
找出數列中排第三個數的值
(英⽂文版)259
先定義⼀一組不可分割的基本函式
First(數列) = 取數列中排第⼀一個數的值
Rest(數列) = 刪掉數列中排第⼀一個的數
允許使⽤用基本函式合成新的函式
Third(數列) = First(Rest(Rest(數列)))
函式類型 (Functional Paradigm)
(英⽂文版)259
LSIP
專⾨門處理數列的語⾔言
Scheme
LISP的改良版
函式類型 vs 程序式類型
(英⽂文版)259
Ubike段數 = 2
Ubike換檔程式
{
上檔(Ubike段數)
}
上檔(Ubike段數)
{
Ubike段數 + 1
}
上檔(Ubike段數)
{
增加⼀一(Ubike段數)
}
函式類型 程序式類型
宣告式類型 (Declarative Paradigm)
宣告式語⾔言(declarative language)使⽤用邏輯推論的原
理來回覆查詢。⼀一些給定的敘述(事實)被假設為真,
使⽤用邏輯推論的規則去演繹出新的敘述(事實)。
類似函式類型,先從⼀一些確定的事實,推論到其他事實
如果 (A 是 B) 且 (B 是 C) => (A 是 C)
(Ubike是腳踏⾞車) 且 (腳踏⾞車是⾞車) => (Ubike是⾞車)
(英⽂文版)260
宣告式類型 (Declarative Paradigm)
宣告式語⾔言是⽤用既定的已知事實套上嚴謹的邏輯定律來
進⾏行推論,他是建⽴立在⼀一⾨門很專⾨門的學問(就叫做邏輯)
上,利⽤用從各個領域得到的各種確定事實,套上由這個
學問領域的邏輯學家導出的邏輯定律,來從確定事實推
導出新的事實
反例:(A 是 C) 且 (B 是 C) =>? (A 是 B)
(英⽂文版)260
宣告式類型 (Declarative Paradigm)
(英⽂文版)260
宣告式語⾔言是⽤用既定的已知事實套上嚴謹的邏輯定律來
進⾏行推論,他是建⽴立在⼀一⾨門很專⾨門的學問(就叫做邏輯)
上,利⽤用從各個領域得到的各種確定事實,套上由這個
學問領域的邏輯學家導出的邏輯定律,來從確定事實推
導出新的事實
反例:(A 是 C) 且 (B 是 C) =>? (A 是 B)
NO
(法拉利是⾞車) 且 (藍寶基尼是⾞車) !=> (法拉利是藍寶基尼)
宣告式類型 (Declarative Paradigm)
(英⽂文版)261
Prolog (PROgramming in LOGic)
範例:
腳踏⾞車 (Ubike)
⾞車 (腳踏⾞車)
?-⾞車 (腳踏⾞車)
>> Yes
告訴電腦已知事實
詢問此邏輯是否成⽴立

計概:Programming Paradigm