面向特性编程(@OP)是一种程序层面的标记技术。编程者可以给程序元素(例如类和方法)标记上特性(attribute),来指示它们包含特定于应用或特定于领域的语义。
简介
特性将一个应用的核心逻辑(或业务逻辑)同特定于应用或特定于领域的语义(比如日志和网页服务功能)分离开来。
例如,一些编程者可以定义“logging”特性并把它关联于一个方法,来指示这个方法应当实现一个日志功能,而其他编程者可以定义一个“web service”特性并把它关联于一个类,来指示这个类应当实现为一个网页服务。通过在程序代码中隐藏这些语义的实现细节,特性增加了编程抽象层次并减少了编程复杂性,导致了更简单和更可读的程序。
关联了特性的程序元素由支持工具(比如预处理器)转化成更详细的程序。例如,一个预处理可以向关联了“logging”特性的方法插入一个日志程序。
各种语言中的面向特性编程
Java
随着J2SE 5.0发行包含了“Metadata Facility for Java”(JSR-175),可以即时采用面向特性编程,这项技术后来发展为Java注解。库使得更早版本的Java也可以采用面向特性编程。
C#
C#语言从最早期发行就支持特性。但是这些特性被用于得到运行时间信息,而不被预处理器所使用(在C#参考实现中一个都没有)。
UML
统一建模语言(UML)支持叫作的一种特性。
Hack
Hack编程语言支持特性。特性可以附加到各种程序实体上,关于这些特性的信息可以通过反射来实时检索。
工具
- apt
- Spoon
- XDoclet
引用
*
*
*
外部链接
- Don Schwarz. [http://www.onjava.com/pub/a/onjava/2004/06/30/insidebox1.html Peeking Inside the Box: Attribute-Oriented Programming with Java5]
- Sun [https://www.jcp.org/en/jsr/detail?id=175 JSR 175]
- [http://www.ondotnet.com/pub/a/dotnet/excerpt/prog_csharp_ch18/index.html?page=1 Attributes and Reflection] - sample chapter from [https://www.oreilly.com/library/view/programming-c/0596001177/ Programming C#] book
- [https://web.archive.org/web/20060421202448/http://dssg.cs.umb.edu/projects/mturnpike.html Modeling Turnpike Project]
- [http://fractal.objectweb.org/fraclet Fraclet] : An annotation-based programming model for the [http://fractal.objectweb.org Fractal] component model
- [https://archive.today/20130128014428/http://madebits.com/aep/index.php Attribute Enabled Software Development] book
评论 (0)