對編程範式的一些理解

面試官問我:XX編程是什麼?你對XX編程的理解?

面向過程編程(POP)

全稱 procedure oriented Programming。根據事情發展的步驟,按進行的過程劃分,每一步都寫成函數,也就是一系列函數的調用。比如做飯:買菜-洗菜-做飯-喫飯。

面向對象編程(OOP)

2分鐘讓你明白什麼是面向對象編程

全稱 Object Oriented Programming。將事情分成多個對象,不同的對象有着自己的行爲和屬性。比如做飯:構建一個人的類,人有名字、性別、身高、體重等屬性,人.買菜- 人.洗菜-人.做飯-人.喫飯 等方法。

面向對象的特性:封裝、繼承、多態。

封裝:將事物中抽出來的對象封裝成類,對象的行爲就是方法(函數),對象的特徵就是屬性。

繼承:子類具有父類的某些行爲,通過繼承來實現。

多態:子類和父類都有xx方法,因此只有在最後執行代碼的時候才知道是用的子類的xx方法還是父類的xx方法。

面向切面編程(AOP)

全稱 Aspect Oriented Programming

AOP技術利用一種稱爲“橫切”的技術,剖解開封裝對象的內部,將影響多個類的公共行爲封裝到一個可重用的模塊中,並將其命名爲Aspect切面。所謂的切面,簡單來說就是與業務無關,卻爲業務模塊所共同調用的邏輯,將其封裝起來便於減少系統的重複代碼,降低模塊的耦合度,有利用未來的可操作性和可維護性。

該博客作者以日誌系統爲例,我認爲講得很好,搬過來。

日誌功能,日誌代碼往往橫向散佈在所有對象層次中,而與之對應的對象的核心功能毫無關係。對於其他類型的代碼,如安全性、異常處理、透明的持續性等也都是如此,這種散佈在各處而且無關的代碼被稱爲橫切(cross-cutting)。在OOP設計中,它們會導致大量重複的代碼,不利用模塊的重用。

AOP將軟件系統劃分爲兩個部分:核心關注點橫切關注點,業務處理的主要流程是核心關注點,與之關係不大的部分是橫切關注點。橫切關注點的特點是經常發生在覈心關注點的多個位置,而且它們功能基本相似。AOP的作用在於分離系統中的各個關注點,將核心關注點和橫切關注點分離開來

在這裏插入圖片描述
我覺得就是在這些切面位置編寫對應的類,來做對應的操作,在覈心關注點中使用即可。

結構化編程

全稱 Structured programming。也就是將程序分成多個模塊來開發。

自頂向下、逐步求精;其程序結構是按功能劃分爲若干個基本模塊;各模塊之間的關係儘可能簡單,在功能上相對獨立;每一模塊內部均是由順序、選擇和循環三種基本結構組成;其模塊化實現的具體方法是使用子程序。結構化程序設計由於採用了模塊分解與功能抽象,自頂向下、分而治之的方法,從而有效地將一個較複雜的程序系統設計任務分解成許多易於控制和處理的子任務,便於開發和維護。
主要內容:
結構化程序設計方法具有很多的優點,但它是一種面向過程的程序設計方法,它把數據和處理數據的過程分離爲相互獨立的實體。當數據結構改變時,所有相關的處理過程都要進行相應的修改,每一種相對於老問題的新方法都要帶來額外的開銷,程序的可重用性差。
發表於 2018-08-23 11:55:01

在各個模塊的開發中,使用三種結構來實現:分支結構 + 條件分支 + 循環結構 ,不要使用 GoTo 語句,瞭解過彙編語言的同學一定知道在彙編語言中就有 GoTo 語句,直接跳轉到某條語句,這樣做的後果就是導致程序的結構十分混亂,這就是 Goto危害論 ,所以後來的許多語言都沒有了 GoTo 語句。

圖片來自知乎
在這裏插入圖片描述
現在大多數使用的語言都是結構化編程的了,拋棄了GoTo語句。

函數式編程

建議大家看看阮一峯老師的博客 阮一峯的網絡日誌—函數式編程初探,我都能看懂你也可以的。

簡單說,“函數式編程"是一種"編程範式”(programming paradigm),也就是如何編寫程序的方法論。

他舉的這個例子我覺得特別好。
在這裏插入圖片描述
Python 有所瞭解的同學會知道,在 Python 中的函數式編程就是內建的map(), zip(), reduce()。

參考文獻

[1] 阮一峯的網絡日誌—函數式編程初探

[2] AOP 面向切面編程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章