# 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 等迴圈
支援 支援平行運算 不支援平行運算
更新於