米老師講課:如何學習(前奏)---面向過程和麪向對象的區別、面向切面編程


最近非常有幸,米老師親自給我們講課,首先讓我們就面向過程編程(POP)、面向對象編程(OOP)和麪向切面編程(AOP),師徒組一起提出問題並討論解決,於是每個師徒組都展開了激烈的研究和討論,也發現自己往往都是知道知識的表象,卻沒有深思。學習要學其原理,正所謂:做學問不能只知其然,而不知其所以然。
今天,小編就這三種編程思想來總結和比較一下,對比學習,方便清楚其中的相通之處,構建知識網。

一、面向過程(POP)與面向對象(OOP)的區別:

“面向過程”(Procedure Oriented)是一種以過程爲中心的編程思想。“面向過程”也可稱之爲“面向記錄”編程思想,這些都是以什麼正在發生爲主要目標進行編程,不同於面向對象的是誰在受影響。他們不支持豐富的“面向對象”特性(比如繼承、多態),並且它們不允許混合持久化狀態和域邏輯。

簡單來說:面向過程就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了;
在這裏插入圖片描述
​​
面向對象是相對於面向過程來講的。面向對象是把構成問題事務分解成各個對象,建立對象的目的不是爲了完成一個步驟,而是爲了描敘某個事物在整個解決問題的步驟中的行爲。

面向對象也可以說是從宏觀方面思考問題,而面向過程可以說是從細節處思考問題。

可以結合生活中的例子來理解一下面向對象和麪向過程:比如我想吃打滷麪

面向過程: 面向過程就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實現。對於我要吃打滷麪來說,首先,我需要想好我要吃什麼滷子,是西紅柿雞蛋滷,還是香菇木耳滷等,假如我要吃西紅柿雞蛋打滷麪,那麼我下一步就是要去準備食材(西紅柿、雞蛋、麪條),然後要做洗菜、切菜、打雞蛋、打滷、煮麪…等等一系列的事情。

面向對象: 面向對象是把構成問題事務分解成各個對象,描述某個事物在整個解決問題的步驟中的行爲。如果我想吃打滷麪,那麼我直接去麪館,張開嘴:老闆!來一份西紅柿打滷麪。
在此過程中,我不需要知道麪館做飯的過程,不需要知道是先煮麪還是先做滷,想吃什麼打滷麪直接點餐就好了,這個就是面向對象。

面向對象有什麼優勢呢? 首先你不需要知道打滷麪是怎麼做的,降低了耦合性。如果你突然不想吃西紅柿打滷麪了,想吃香菇木耳打滷麪,對於面向過程你可能不太容易了,還需要重新買菜,買調料什麼的。對於面向對象太容易了,大喊:老闆!那個西紅柿打滷麪換成香菇木耳打滷麪吧,提高了可維護性。總的來說就是降低耦合,提高維護性!

面向過程是具體化的,流程化的,解決一個問題,你需要一步一步的分析,一步一步的實現。

面向對象是模型化的,你只需抽象出一個類,這是一個封閉的盒子,在這裏你擁有數據也擁有解決問題的方法。需要什麼功能直接使用就可以了,不必去一步一步的實現,至於這個功能是如何實現的,管我們什麼事?我們會用就可以了。

面向對象的底層其實還是面向過程,把面向過程抽象成類,然後封裝,方便我們我們使用的就是面向對象了。

面向對象,對象是什麼?每個對象都具有屬性和行爲。
屬性:用於描述某個對象的特徵,比如:身高,體重,姓名,年齡,性別等等。
方法:描述對象動態的一方面,比如:廚師會做飯,服務員會點餐等。

面向對象具有三大特徵:封裝、繼承、多態。 這是對於類而言的,但是其實現過程又是通過類實例化成對象來實現的。類是對象的抽象概念,對象是類的實例化,比如:人類就是一個“類”,而“張三”、“李四”等就是類中的一個具體對象。

二、面向對象和麪向過程的優缺點:

面向對象:

優點:易維護、易複用、易擴展,由於面向對象有封裝、繼承、多態性的特性,可以設計出低耦合的系統,使系統 更加靈活、更加易於維護
缺點:性能比面向過程低

面向過程:

優點:性能比面向對象高,因爲類調用時需要實例化,開銷比較大,比較消耗資源;比如單片機、嵌入式開發、 Linux/Unix等一般採用面向過程開發,性能是最重要的因素。
缺點:沒有面向對象易維護、易複用、易擴展

三、面向切面編程(AOP):

簡介:
AOP爲Aspect Oriented Programming的縮寫,意爲:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。

1)AOP是OOP的延續,是人們在OOP的基礎上對於OOP的缺陷提出的一種優化方式。是面向切面編程。 2)對於AOP思想進行舉例:在設計程序時,不同的功能實現有時需要相同的流程,將相同部分的流程提取出來,(到這類似於OOP)把功能實現流程說成是縱向,那把相同部分提取成一個橫向的面,就是AOP的思想。提取出來後,可以更注重主業務邏輯,提高開發效率。 3)提出了代理模式與AOP的觀點,但更深度的過程以及聯繫還有待考究。

四、OOP 和AOP的區別與聯繫:

OOP和AOP區別:
1、面向目標不同:簡單來說OOP是面向名詞領域,AOP面向動詞領域。
2、思想結構不同:OOP是縱向結構,AOP是橫向結構。
3、注重方面不同:OOP注重業務邏輯單元的劃分,AOP偏重業務處理過程的某個步驟或階段。
OOP和AOP聯繫:
兩者之間是一個相互補充和完善的關係。

總的來說:
AOP是針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟或階段,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性。主要的功能是:日誌記錄,性能統計,安全控制,事務處理,異常處理等等
OOP針對業務處理過程的實體及其屬性和行爲進行抽象封裝,以獲得更加清晰高效的邏輯單元劃分。

AOP的優勢:

AOP將面向對象過程中,一些業務中重複(相同)的部分截取出來,並將它放在一個獨立的類裏,這樣就大大減少了面向對象過程中重複的
運行負載,且獨立出來的這個類仍然可以掌控全局(執行原有的職責),有利於複用及軟件的維護。

AOP的主要應用:

日誌記錄、事務處理、異常處理、安全控制和性能統計方面。

關於AOP,小編只是初步瞭解,具體的使用和原理還不太清楚,後續繼續學習!對於每一種編程思想,要充分了解其設計的編程思想和理念,針對具體的問題使用。

發佈了68 篇原創文章 · 獲贊 15 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章