面向特性编程

面向特性编程（@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编程语言支持特性。特性可以附加到各种程序实体上，关于这些特性的信息可以通过反射来实时检索。

工具 
 Annotation Processing Tool (apt) 
 Spoon , an Annotation-Driven Java Program Transformer
 XDoclet, a Javadoc-Driven Program Generator

引用

外部链接
 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

编程典范