面向方面程式設計,又稱面向切面程式設計(aspect-oriented-programming),英文縮寫 aop,可以說是 oop(object-oriented-programming)物件導向程式設計的補充和完善。oop 引入封裝,繼承,多型性等概念來建立一種物件層次結構,這種物件層次結構通俗的說也就是我們所說的軟體。對於 oop,我記得 bruce eckel 有一句名言,「 everything is object. 」,中文翻譯為 「萬物皆物件」 。我們可以將萬物定義為一些物件,並將這些物件的行為和屬性封裝起來,同時定義好物件與物件之間的關係。實質上,在現實開發中,往往有一些角落一直以來被 oop 忽略或者說未能解決好的,aop 是 oop 的一種補充或某種改進,它轉換了程式設計的方式和視角。
在我們以往的開發中,有一些**往往和核心業務無關,但卻大量的分布在所有的物件層次當中。比如:銀行業務和事務處理之間,乙個是銀行的核心業務,乙個是非核心業務,他們並從業務的角度上來說,並沒有什麼真的關聯,但是他們卻沒有彼此分離開來,還有諸如銀行業務與日誌記錄,許可權驗證,效能檢測等等功能,沒有與核心業務分離開來。
如圖,核心 業務模組a 中與 核心業務模組b 之中都包含了與他們的核心業務無關的邏輯,最終造成的高耦合狀態。
通過上圖我們可以知道,當在軟體開發中我們要為這些分散的物件引入公共的行為時,oop 則顯得無力。oop 定義了從上到下的關係,但是並不適合定義從左到右的關係。這時,當 oop 正在為定義這些左右關係而煩勞的時候,aop (面向方面程式設計) 出現了。
通過 aop(面向方面的程式設計),可以將程式的責任分開,物件與方面互不干擾。面向方面的模組並非顯式地為物件所呼叫,而是通過或注入或擷取的方式,去獲得被封裝的物件內部方法間的訊息,然後做出相應地處理。也許面向方面的模式破壞了物件的封裝,卻正其如此,方才能降低模組與模組之間的耦合度。同樣地,通過對「方面」的封裝,將這些通用的功能從不同的類中分離出來,使不同的模組都能共享同樣的「方面」,這也極大地減少了重複**。通過上面的圖可以看出,通過 aop 的方式,將業務邏輯和橫切邏輯從業務模組中分離出來,極大的降低了系統的耦合。
如果說 「物件」 是一根竹竿,竹竿其中封裝的是物件的屬性和行為;那麼面向方面程式設計的方法,就彷彿一把利刃,將這一根竹竿切成很多截,以獲得其內部的訊息。而切開的竹截,也就是所謂的 「方面」 了。然後它又巧妙的將這些切開的切面復原,不留痕跡。
本系列導航帖 :
由於個人水平有限,以上字元僅代表個人觀點。
第五章 面向方面程式設計
面向方面程式設計,又稱面向切面程式設計 aspect oriented programming 英文縮寫 aop,可以說是 oop object oriented programming 物件導向程式設計的補充和完善。oop 引入封裝,繼承,多型性等概念來建立一種物件層次結構,這種物件層次結構通俗的...
第五章 物件導向程式設計
一.單選題 共6題,100.0分 1以下關於c 中方法過載的說法正確的是 a 如果兩個方法名稱不同,而引數的個數不同,那麼它們可以構成方法過載 b 如果兩個方法名稱相同,而返回值的資料型別不同,那麼它們可以構成方法過載 c 如果兩個方法名稱相同,而引數的資料型別不同,那麼它們可以構成方法過載 d 如...
程式設計珠璣第五章
直接來習題吧 1 第一題可以看一下林銳的高質量c c 程式設計 2 3 4 5 第五題很明顯不應該每次都用 for i 0 i n 1 i assert a i a i 1 如何利用二分的性質來進行處理還是乙個問題。一種辦法是 int bs int a,int b,int e,int v retur...