1. 程式人生 > >OOP和AOP的區別於聯絡

OOP和AOP的區別於聯絡

面向物件的程式設計(OOP)方法是在面向過程程式設計方法基礎上進行的改進,而面向方面程式設計(AOP)方法又是在面向物件程式設計(OOP)方法的基礎上進行改進而來的一種創新的軟體開發方法。

1、區別:

面向領域不同

        AOP和OOP是面向不同領域的兩種設計思想。

        OOP(面向物件程式設計)針對問題領域中以及業務處理過程中存在的實體及其屬性和操作進行抽象和封裝,面向物件的核心概念是縱向結構的,其目的是獲得更加清晰高效的邏輯單元劃分

          而 AOP則是針對業務處理過程中的切面進行提取,例如,企業開發中經常會面臨的種種非功能性需求(操作日誌、許可權控制、效能監測等等

),用面向物件的思路,將業務操作物件的核心功能和對它的其他服務性功能程式碼分離,即某一個操作在各個模組中都有涉及,這個操作就可以看成“橫切”存在於系統當中。在許多情況下,這些操作都是與業務邏輯相關性不強或者不屬於邏輯操作的必須部分,而面向物件的方法很難對這種情況做出處理。 

  AOP則將這些操作與業務邏輯分離,使程式設計師在編寫程式時可以專注於業務邏輯的處理,而利用 AOP將貫穿於各個模組間的橫切關注點自動耦合進來。 AOP所面對的是處理過程中的某個步驟或階段,對不同的階段領域加以隔離,已獲得邏輯過程中各部分之間低耦合性的隔離效果,其與面向方面程式設計在目標上有著本質的差異。 AOP的核心思想就是將應用程式中的業務邏輯處理部分同對其提供支援的通用服務,即所謂的“橫切關注點”進行分離,這些“橫切關注點”貫穿了程式中的多個縱向模組的需求。

2、關係:

AOP是OOP的延續和補充。

        AOP 與 OOP 並不是相互競爭的兩種技術, 人們不是為了代替OOP 而提出  AOP, 事實上  AOP 與 OOP 兩者互相之間是一個很好的補充和完善。

       OOP面向物件程式設計關注的是將需求功能“ 垂直” 劃分為不同的並且相對獨立, 封裝良好的類, 並讓它們有著屬於自己的行為。至於物件間的關係則依靠繼承和多型等來定義,即OOP引入封裝、繼承和多型性等概念來建立一種物件層次結構,用以模擬公共行為的一個集合。當我們需要為分散的物件引入公共行為的時候,OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關係,但並不適合定義從左到右的關係。例如日誌功能。日誌程式碼往往水平地散佈在所有物件層次中,而與它所散佈到的物件的核心功能毫無關係。對於其他型別的程式碼,如安全性、異常處理和透明的持續性也是如此。這種散佈在各處的無關的程式碼被稱為橫切(cross-cutting)程式碼,在OOP設計中,它導致了大量程式碼的重複,而不利於各個模組的重用。

       而 AOP技術則恰恰相反,它利用一種稱為“橫切”的技術,將 OOP 構建的龐大的類體系結構進行進一步的 “ 水平” 切割,並將那些影響了多個類的公共行為封裝到一個可重用模組,封裝成“Aspect”,即方面。所謂“方面”,簡單地說,就是將那些與業務無關,卻為業務模組所共同呼叫的邏輯或責任封裝起來,便於減少系統的重複程式碼,降低模組間的耦合度,並有利於未來的可操作性和可維護性。 AOP代表的是一個橫向的關係,如果說“物件”是一個空心的圓柱體,其中封裝的是物件的屬性和行為;那麼面向方面程式設計的方法,就彷彿一把利刃,將這些空心圓柱體剖開,以獲得其內部的訊息。而剖開的切面,也就是所謂的“方面”了。然後它又以巧奪天功的妙手將這些剖開的切面復原,不留痕跡。

   面向方面程式設計則是希望能夠將 OOP 構建的龐大的類體系結構進行進一步的 “ 水平” 切割, 將通用需求功能從不相關的類當中分離出來, 封裝成方面。


本文原創連結:https://blog.csdn.net/sundenskyqq/article/details/7597610