物件導向先生和他的兄弟姐妹們(二)——小議【OOP、COP、AOP、SOP】

獨孤文彬發表於2015-08-24
額,發現上一篇《物件導向先生和他的兄弟姐妹們——小議【OOP、COP、AOP、SOP】》那樣的寫作風格確實是有點偏了額,不過作為一個非寫作專業人士,這樣的試水我覺得挺有意思的,哈哈!嗯,我們們還是迴歸正常路線吧。接著說我們們的正事兒哈!

物件導向思想的簡單理解:

  從世界觀的角度可以認為:物件導向的基本哲學是認為世界是由各種各樣具有自己的運動規律和內部狀態的物件所組成的;不同物件之間的相互作用和通訊構成了完整的現實世界。因此,人們應當按照現實世界這個本來面貌來理解世界,直接通過物件及其相互關係來反映世界。這樣建立起來的系統才能符合現實世界的本來面目。

  從方法學的角度可以認為:物件導向的方法是物件導向的世界觀在開發方法中的直接運用。它強調系統的結構應該直接與現實世界的結構相對應,應該圍繞現實世界中的物件來構造系統,而不是圍繞功能來構造系統(摘自——百度百科)

到哪裡去?(物件導向的發展)

1、OOP——COP
  概念簡介:COP(Component-OrientedProgramming):面向元件程式設計,所謂的元件是由一個類或多個類及其它元素組成,但是元件有個很明顯的特徵,就是它是一個獨立的物理單元,經常以非原始碼的形式(如二進位制,IL)存在。一個完整的元件中一般有一個主類,而其它的類和元素都是為了支援該主類的功能實現而存在的。我們使用的DLL檔案就是元件。還有COM元件……
COP的目標是粗粒度的複用,它的核心是介面。其實就是隔離變化,讓系統的構建更加靈活可變。

自己對於COP的思考:這種面向元件式的程式設計思想其實應該源自建築行業,從現實生活中來看,我們建造房子的歷史要遠遠早與軟體開發和設計。在我們建造房子的過程中,我們就是用面向元件的方式進行的。可以將一塊塊的柱子,磚頭,釘子,門,鎖等建造房子所必須的構建看做是元件,在建造房子的過程中直接進行組合構建而成。這個過程非常靈活,哪裡壞了換哪裡。而且可以同時進行建造工作,效率極高!

哥倆的對比:

先來看看OOP技術

  OOP基礎 -- 介面與實現分離;OOP核心 -- 介面和實現分離的更高階昇華,使得在執行時可以動態根據條件來選擇隱藏在介面背後的實現;OOP表現形式 --類和繼承,OOP的主要目標是使系統物件化,良好物件化的系統,就是系統的各部分更加清晰,耦合度大大降低。


再來看看COP技術:

  COP技術是建立在OOP技術之上的,它是OOP的進一步發展。類仍然是元件技術中一個基礎的概念,元件技術更核心的是介面。元件技術的主要目標是複用--粗粒度的複用,不是類的複用,而是元件的複用,如一個DLL,一箇中介軟體,甚至一個FrameWork。

2、OOP——AOP

  AOP為Aspect OrientedProgramming的縮寫,意為:面向切面程式設計,可以通過預編譯方式和執行期動態代理實現在不修改原始碼的情況下給程式動態統一新增功能的一種技術。
  AOP是OOP的延續和發展。

個人理解:

  物件導向的程式設計思想的經典體現可以從Gof設計模式找到,設計模式中大多體現解耦的思想。將呼叫者和被呼叫者之間進行解耦。覺得這裡面有很多相似的地方。其實,從某種意義上來說有點GOf設計模式中的裝飾模式的感覺。

  裝飾模式的定義:(DecoratorPattern,裝飾模式是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件一個物件的功能。它是通過建立一個包裝物件,也就是裝飾來包裹真實的物件。)

用到何處?

通常AOP被用到日誌管理、異常處理、效能統計、安全控制、事務處理等系統功能的設計中。將將這些功能的程式碼從業務邏輯程式碼中劃分出來,通過對這些行為的分離,我們希望可以將它們獨立到非指導業務邏輯的方法中,進而改變這些行為的時候不影響業務邏輯的程式碼

哥倆對比:

OOP針對業務處理過程的實體及其屬性和行為進行抽象封裝,以獲得更加清晰高效的邏輯單元劃分

AOP則是針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟或階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。這兩種設計思想在目標上有著本質的差異

三幅圖看懂AOP(摘自51技術部落格)

1、傳統業務邏輯元件設計


2、面向切面的設計


3、AOP原理剖析



 

相關文章