# OOP/FP 程式設計的方法
# OOP 物件導向程式設計
Object-Oriented Programing
有很多別稱 物件導向軟體工程 / 面相對象程式設計 /…
# 特色
善用「封裝」將許多關聯的工具 (Method, 方法) 或內容 (Property, 屬性) 透過封裝成一體 (Class 類別) 進行設計,再透過「繼承、多形」的方式衍伸出更多用途。
# 封裝
封裝之概念,這邊用電風扇為例子
電風扇其實是一個家電,裡面可能包含了很多電子零件,那要怎麼讓一般民眾可以簡易的去操作電風扇呢,作為電風扇的工程師我們必須把複雜的電子零件 (Property, 屬性) 與啟動按鈕 (Method, 方法) 給「封裝」起來成為一個家電 (Class, 類別),完成家電之後民眾就可以簡易的去呼叫物件方法。
# 繼承 / 多形
延續剛剛電風扇的例子,假設我想基於電風扇的概念去設計出能夠讓 遙控器控制的無線電風扇,這時候我可以去「繼承」剛剛的電風扇類別,「保留」相同的電子零件 (屬性,Property),啟動方法 (Method, 方法),在無線取代有線控制的功能透過「覆寫」的方法是取代原有的方法,最後設計出不同的功能也就是不同的類別,此為「多形」
# FP 函式導向程式設計
Functional Programming
# 特色
最小化程式功能、工具以函式的方式進行表示,可以將一連串的步驟拆分為成一個步驟一個函式,步驟之間使用呼叫步驟 (函式) 來完成一系列的流程。
透過拆解問題 (步驟) 的方式,我們將各個函式的複雜程度降低,達到較高的「共用性」與「可讀性」。
# 舉例
我想製作一個製作蛋糕的自動化系統,我們可以將製作蛋糕這個大問題拆分成很多步驟,且每個步驟都是一個函式,步驟的流程進行以互相呼叫下一個步驟的函式往下進行。
# 共用性
由於我們將步驟拆分化,我們可以讓很多需要這類型函式給很多不同東西共用,如:我可以將剛剛製作的部分流程步驟給製作麵包。
# 可讀性
由於我們將流程進行拆解,基本上每個函式的內容會變少且流程清晰,提升可讀性
# FP/OOP 比較
FP | OOP | |
---|---|---|
定義 | 圍繞 function | 圍繞 class |
單位 | function/variable | class/object |
資料 | 不可變資料 | 可變資料 |
迭代 | 使用遞迴 | 使用 for/while 等迴圈 |
支援 | 支援平行運算 | 不支援平行運算 |