一、面向過程編程:(POP:Procedure Oriented Programming)
面向過程編程是以功能為中心來進行思考和組織的一種編程方法,它強調的是功能(即系統的數據被加工和處理的過程),在程序設計中主要以函數或者過程為程序的基本組織方式,系統功能是由一組相關的過程和函數序列構成。
從思維上來講,面向過程更強調細節,忽視了整體性和邊界性。
典型代表是 C/C++的結構體
理解:
分析解決問題所需要的步驟,然后用函數把這些步一一實現,使用的時候按順序依次調用就可以了
代碼線性,嚴格按着順序,側重解決步驟,着眼局部或者具體。
優點
- 流程化編程任務明確,在開發之前基本考慮了實現方式和最終結果;
- 開發效率高,代碼的短小精悍,善於結合數據結構來開發高效率的程序;
- 流程明確,具體步驟清楚,便於節點分析。
缺點
- 需要深入的思考,耗費精力;
- 代碼重用性低,不易擴展,維護起來難度大;
- 對復雜業務,面向過程的模塊化難度較高,耦合度比較高。
二、面向對象編程:(OOP:Object Oriented Programming)
面向對象編程以對象為中心,面向對象作為一種新型的程序設計方法,其是以對象模型為基礎進行的抽象過程,並在應用過程中形成了描述自己的抽象概念定義,包括對象、類、封裝、繼承以及多態等。
面向對象是一種編程范式,滿足面向對象編程的語言,一般會提供類、封裝、繼承等語法和概念來輔助我們進行面向對象編程。
理解:
萬物皆對象,可以搭建大型的復雜系統
首先,它必須將數據抽象為模塊結構;
其次,必須存在某種方式來實現代碼的多態執行;
最后,它至少能部分壓縮代碼和函數。
優點
- 結構清晰,注重 對象和職責,不同的對象承擔不同的職責;
- 封裝性,將事務高度抽象,便於流程中的行為分析、操作;
- 容易擴展,代碼重用率高,可繼承,可覆蓋;
- 實現簡單,可有效地減少程序的維護工作量。
缺點
- 面向對象在面向過程的基礎上高度抽象,從而和代碼底層的直接交互非常少,從而不適合底層開發和游戲開發,甚至是多媒體開發;
- 復雜性,對於事務開發而言,事務本身是面向過程的,過度的封裝導致事務本身的復雜性提高。
三、面向切面編程:(AOP:Aspect Oriented Programming)
面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是OOP的延續,針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟或階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。
理解:
可以讓類動態化,動態粒度更小,可以修改類中的成員
專注實現自身業務功能,周邊業務功能可動態加進來(用戶驗證/日志處理/...)
優點
- 簡單,易用;
- 降低模塊的耦合度;
- 使系統容易擴展;
- 設計決定的遲綁定:設計師可以推遲為將來的需求作決定;
- 更好的代碼復用性。
缺點
- 增加額外重復代碼,且緊耦合;
- 每個業務邏輯需要一個裝飾器實現或代理;
- 使用麻煩,須增加容器。
總結
POP編程是以功能為中心來思考和組織程序,注重功能的實現,達到效果就可以了;
OOP則注重封裝,以對象為中心,強調整體性,代碼整體變得更規范;但是OOP的耦合性還是很高,一旦代碼需要修改,會對很多類造成影響,代碼冗余問題嚴重,而且核心業務中總夾雜着一些它並不關心的通用業務,比如日志記錄、性能統計、安全控制、事務處理、異常處理等;
AOP正好解決了OOP周邊通用業務的解耦問題。
三者之間是一個相互補充和完善的關系。