Programming Paradigms — imperative, functional, declarative, object-oriented
Programming Paradigms
常常看文章時看到一些類似這樣的敘述 ref
就很困惑這些到底是什麼意思,今天就來跟大家分享。
💡 我們在用不同的程式語言時,要用該語言的思維方式去使用它。
雖然他們能做的事情都一樣,但是他們能力不同
舉例來說,C++ 能辦到的事情,想必 Java 也行,SQL 也有機會可以做到。而根據不同能力,有以下分類:
Imperative
程序導向 → Procedure,其實就是 Finding algorithm ,也是我們最習慣的用法。
大部分的語言特性,像在寫 leetcode 題一樣,step by steps 依序做出來。
Object-Oriented (OOP)
物件導向,想像這個世界裡的東西都是一個一個物件,你要用這些物件去幫你做事。
例如小畫家:你今天要畫出很不同形狀,首先你要有一個物件 Shape,這個 Shape 可以幫你畫出圓型、矩形、三角形。
目的:常聽到的是複用,但複用的最終目的其實是「幫助程式設機師減少犯錯」。
能減少犯錯是基於以下特性:
- Abstraction 物件類別
- information hiding
-
encapsulation 封裝
💡 像是 SOLID 裡的 O: open-closed
open for extension; closed for modification
你只能用 public function,不能修改 private function
-
polymorphism
-
- inheritance
Functional
整個程式是一個函示,函示裡有子函示 (decomposition)
假設你有一個函示如下:
income - saving - investment = outcome
以 functional 的寫法就會是
tmp = findSum(saving, investment)
outcome = findDiff(income, tmp)
或是
tmp = findDiff(income, saving)
outcome = findDiff(tmp, investment)
imperative 就是
tmp = income - saving
outcome = tmp - investment
是不是其實功能都一樣:))
Declarative
一個 problem solver,像你有一個黑盒子,當你把問題定義清楚後,丟進盒子裡,就會得到解答。
像是我今天想要計算階層,問電腦 5! 等於多少,那你就要定義階層是什麼:
5! = 5 * 4!
4! = 4 * 3!
…
讓黑盒子知道 n! = n * (n-1)! 後,最後告訴黑盒子 0! = 1,黑盒子在推導的過程就會像這樣
3! = 3 * 2! → 2! = 2 * 1! → 1! = 1 * 0! → 0! = 1 → 1! = 1 * 1 = 1 → 2! = 2 * 1 = 2 → 3! = 3 * 2 = 6 → 4! = 4 * 6 = 24 → 5! = 5 * 24 = 120
像文章開頭的 SQL,你不用實作他撈資料的邏輯,不用想那些 constraint, indexes 以及怎麽 optimize query,你只要定義好你要什麼資料,他就會撈給你,你不用知道怎麼撈。
ref:
Comments
Post a Comment