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

Popular posts from this blog

紅石抱石技巧 V3 - V4 訓練班 - 整體上課心得

《涅瓦大學的學習秘訣—李佳達》只看了一篇文就成長了

《把時間買回來》