面向特性編程
面向特性編程(@OP)是一種程序層面的標記技術。編程者可以給程序元素(例如類和方法)標記上特性(attribute),來指示它們包含特定於應用或特定於領域的語義。
簡介
編輯特性將一個應用的核心邏輯(或業務邏輯)同特定於應用或特定於領域的語義(比如日誌和網頁服務功能)分離開來。
例如,一些編程者可以定義「logging」特性並把它關聯於一個方法,來指示這個方法應當實現一個日誌功能,而其他編程者可以定義一個「web service」特性並把它關聯於一個類,來指示這個類應當實現為一個網頁服務。通過在程序代碼中隱藏這些語義的實現細節,特性增加了編程抽象層次並減少了編程複雜性,導致了更簡單和更可讀的程序。
關聯了特性的程序元素由支持工具(比如預處理器)轉化成更詳細的程序。例如,一個預處理可以向關聯了「logging」特性的方法插入一個日誌程序。
各種語言中的面向特性編程
編輯Java
編輯隨着J2SE 5.0發行包含了「Metadata Facility for Java」(JSR-175),可以即時採用面向特性編程,這項技術後來發展為Java註解。XDoclet庫使得更早版本的Java也可以採用面向特性編程。
C#
編輯C#語言從最早期發行就支持特性。但是這些特性被用於得到運行時間信息,而不被預處理器所使用(在C#參考實現中一個都沒有)。
UML
編輯統一建模語言(UML)支持叫作stereotype的一種特性。
Hack
編輯Hack程式語言支持特性。特性可以附加到各種程序實體上,關於這些特性的信息可以通過反射來實時檢索。
工具
編輯引用
編輯- Attribute-Oriented Programming. An Introduction to Attribute-Oriented Programming. [July 22, 2005]. (原始內容存檔於May 26, 2005).
- Wada, Hiroshi; Suzuki, Junichi. Modeling Turnpike Frontend System: a Model-Driven Development Framework Leveraging UML Metamodeling and Attribute-Oriented Programming (PDF). In Proc. of the 8th ACM/IEEE International Conference on Model Driven Engineering Languages and Systems (MoDELS/UML 2005). 2005 [2006-03-21]. (原始內容 (PDF)存檔於2016-03-03).
- Rouvoy, Romain; Merle, Philippe. Leveraging Component-Oriented Programming with Attribute-Oriented Programming (PDF). In Proc. of the 11th ECOOP International Workshop on Component-Oriented Programming (WCOP 2006). 2006. (原始內容 (PDF)存檔於2006-12-23).
外部連結
編輯- Don Schwarz. Peeking Inside the Box: Attribute-Oriented Programming with Java5 (頁面存檔備份,存於互聯網檔案館)
- Sun JSR 175 (頁面存檔備份,存於互聯網檔案館)
- Attributes and Reflection (頁面存檔備份,存於互聯網檔案館) - sample chapter from Programming C# (頁面存檔備份,存於互聯網檔案館) book
- Modeling Turnpike Project
- Fraclet (頁面存檔備份,存於互聯網檔案館): An annotation-based programming model for the Fractal (頁面存檔備份,存於互聯網檔案館) component model
- Attribute Enabled Software Development book