面向方面程式設計的介紹----基本概念(1) (轉)
面向方面的介紹----基本概念(1)
:namespace prefix = o ns = "urn:schemas--com::office" />
面向的程式設計中常用的概念是:繼承、封裝、多型。在面向方面的程式設計中常使用的概念是:advices/interceptors, introductions, metadata, and pointcuts。
AOP 面向方面程式設計的介紹----基本概念(3)
面向方面的程式設計思路很簡單。從程式導向、的程式設計到物件導向的程式設計到面向介面的程式設計到面向、模組程式設計的發展歷史我們可以知道,程式設計方法學的演進是一步一步的擴大了程式設計考慮的“邊界”。到目前為止我們的程式設計世界裡的宇宙邊界是“類、介面,或者元件”,在這個邊界裡,我們認為,一個類實現一個介面,那就不能動態的實現另一個介面,已有類的行為在編譯以前就基本固定,要麼是類內部定義的方法,要麼是要麼是繼承和實現介面繼承過來的方法。但是實際的程式設計工作中我們碰到了“跨邊界的情況”,需要多個類,介面,元件合作才能完成的工作,比如:多執行緒併發訪問,流集中控制,序列化和程式狀態保持,以及需要多個“類、介面、元件邊界”共同參於才能完成的工作。為了更好的處理多個邊界共同完成同一方面的工作,面向方面的程式設計出現了。這裡的方面,我們可以指:為完成同一任務而需要多個類、介面、元件一起協作工作的綜合。你可以認為方面其實就是一個更大的類,這個類主要由我們中的類、介面組成,當然這些類和介面是如此的親密,以至於他們行為(方法)可以相互轉換。其實這沒什麼大不了的,介面的出現不是實現了動態的改變類的行為的嗎?面向方面的程式設計只是做了一個延伸,把這個改變提升到了介面這個層次上。寫到這裡,我感到:耳朵清靜了,但是世界還沒有清靜,因為到實際的運用這種思路程式設計,還需要很長的時間,和更多工具開發商的支援。
在我以後的文章中我想統一下面的概念:
1、inter-type declarations 邊界內部型別宣告:Inter-type 宣告在ectJ中有很多種形式,使用他來描述類之間的關係、類本身成員和結構資訊。
2、join point 連線點:連線點是在程式流程中定義的一個點。
4、crosscutting concerns :考慮邊界交叉
5、Pointcuts 連線點集:程式執行中持有對多個連線點狀態的集合。
5、advice 通知點行為:連線點集如同一個包括多個的“結構”,本身不具有行為,其行為靠通知點行為來實現。
以上的名詞主要用於:AspectJ的介紹中。
Advices/Interceptors(訊息傳達/訊息攔截)
一個“傳達的訊息”是一個被特定事件觸發發的邏輯(程式碼)。這個“傳達的訊息”可以被插入到一個者和被呼叫者佇列之間。可以說:傳達訊息是面向方面的程式設計的一個關鍵組成部份。
Introductions(成員推薦)
Introductions 是用來向已有的類增加方法和屬性的一個方法。使用成員推薦你可以把一個現有類實現的介面“介紹”到另一個新的介面中。大家知道,介面的出現就是為了把定義和實現分開,現在使用面向方面的程式設計,可以做到動態改變既有類的介面,太不可思議了。在程式設計中使用“成員推薦”你可以做到讓一個java類實現多重繼承。也就是說,使用“成員推薦”你可以在程式執行的時候來動態改變類的介面,實現不同的行為。就像孫悟空可以不斷變換自己的行為,但是這個孫悟空必須有三個毫毛(被“成員推薦”)。看下面的例子:
Apple apple = new Apple();
Logging logging = (LoggingAPI)apple;
Apple.setLoggingLevel(VERBOSE);
使用“成員推薦”:Apple 可以動態的擁有log的功能了。
Metadata(後設資料)
後設資料是用來描述類本身的一些附加資訊和其描述類捆綁在一起,可以靜態的或者再執行的時刻獲得這些類的描述資訊。例子參見我的另一片文章(使用反射機制實現動態工廠)。中就使用了大量的Metadata。
Pointcuts
如果說:interceptors, introductions, and metadata 是面向方面程式設計的特點的話,那麼 pointcuts are 就是連線他們在一起的“膠水”。 Pointcuts 是執行在AOP,比如:告訴框架如何確認訊息傳達、後設資料是如何在類中定義的、那些類、介面被“成員推薦”了等等。
後面我們說說: 4.0中的AOP框架。
/05/28/aop_jboss.html">
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958273/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring 面向方面程式設計 AOPSpring程式設計
- Spring Boot中面向方面程式設計 (AOP)教程Spring Boot程式設計
- HTML5與WebGL程式設計(1):介紹HTMLWeb程式設計
- NIO程式設計介紹程式設計
- Shell程式設計 --- Shell介紹程式設計
- 京東科技設計稿轉程式碼平臺介紹
- Linux中Libevent程式設計介紹Linux程式設計
- Python多工程式設計介紹Python程式設計
- Erlang/Elixir 中的 OTP 程式設計介紹程式設計
- 程式設計思想 面向切面程式設計程式設計
- Rust 程式設計影片教程(進階)——010_1Box 介紹Rust程式設計
- Rust 程式設計影片教程(進階)——029_1 宏介紹Rust程式設計
- Linux系統程式設計之程式介紹Linux程式設計
- 程式設計–基本概念程式設計
- 面向介面程式設計程式設計
- Spring IoC、面向切面程式設計、事務管理等Spring基本概念詳解Spring程式設計
- IT程式設計各學科語言的介紹程式設計
- shell程式設計–bash變數介紹程式設計變數
- Nginx 教程:基本概念介紹Nginx
- Rust 程式設計影片教程(進階)——018_1 互斥器介紹Rust程式設計
- Rust 程式設計視訊教程(進階)——010_1Box 介紹Rust程式設計
- Rust 程式設計影片教程(進階)——011_1 解引用介紹Rust程式設計
- Rust 程式設計影片教程(進階)——012_1Drop trait 介紹Rust程式設計AI
- Rust 程式設計視訊教程(進階)——029_1 巨集介紹Rust程式設計
- Rust 程式設計影片教程(進階)——003_1 迭代器介紹Rust程式設計
- 面向sql程式設計的探索之路SQL程式設計
- 面向資料的程式設計 · Laurent程式設計
- AOP(面向切面程式設計)程式設計
- AOP 面向切面程式設計程式設計
- 面向架構程式設計架構程式設計
- WebGL程式設計指南(1)簡介Web程式設計
- 網路程式設計框架t-io的程式設計基本知識介紹程式設計框架
- JAVA設計模式 1 設計模式介紹、單例模式的理解與使用Java設計模式單例
- Rust 程式設計視訊教程(進階)——012_1Drop trait 介紹Rust程式設計AI
- Rust 程式設計視訊教程(進階)——011_1 解引用介紹Rust程式設計
- Rust 程式設計影片教程(進階)——016_1 執行緒介紹Rust程式設計執行緒
- Rust 程式設計視訊教程(進階)——005_1 閉包介紹Rust程式設計
- Rust 程式設計視訊教程(進階)——003_1 迭代器介紹Rust程式設計
- Rust 程式設計影片教程(進階)——004_1 生命週期介紹Rust程式設計