{{More footnotes|date=August 2009}}

'''Attribute-oriented programming''' ('''@OP''') is a technique for embedding metadata, namely attributes, within program code.

== Attribute-oriented programming in various languages == === C++ === C++ has support for attributes. C++11 added attributes, which can indicate extra information to the compiler. C++26 added annotations for reflection.

=== C# === The C# language has supported attributes from its very first release. These attributes was used to give run-time information and are not used by a preprocessor. Currently with source generators, you can use attributes to drive generation of additional code at compile-time.

=== Hack === The Hack programming language supports attributes. Attributes can be attached to various program entities, and information about those attributes can be retrieved at run-time via reflection.

=== Java === Java has support for annotations. With the inclusion of Metadata Facility for Java (JSR-175)<ref>{{cite web | url=https://jcp.org/aboutJava/communityprocess/final/jsr175/index.html | title=The Java Community Process(SM) Program - communityprocess - final }}</ref> into the J2SE 5.0 release it is possible to utilize attribute-oriented programming right out of the box. XDoclet library makes it possible to use attribute-oriented programming approach in earlier versions of Java.

In Java, annotations are used for code generation and reflection.

=== UML === The Unified Modeling Language (UML) supports a kind of attribute called stereotypes.

== Tools == * [https://docs.oracle.com/javase/1.5.0/docs/guide/apt/ Annotation Processing Tool (apt)] * [http://spoon.gforge.inria.fr/ Spoon], an Annotation-Driven Java Program Transformer * [https://web.archive.org/web/20080314051510/http://xdoclet.codehaus.org/ XDoclet], a Javadoc-Driven Program Generator

== References == {{Reflist}} {{Refbegin}} * {{cite web|title=Attribute-Oriented Programming |url=http://dssg.cs.umb.edu/resources/attribute-oriented-programming.html |work=An Introduction to Attribute-Oriented Programming |accessdate=July 22, 2005 |url-status=dead |archiveurl=https://web.archive.org/web/20050526230023/http://dssg.cs.umb.edu/resources/attribute-oriented-programming.html |archivedate=May 26, 2005 }} * {{cite web | last = Wada | first = Hiroshi | author2 = Suzuki, Junichi | year = 2005 | url = https://www.cs.umb.edu/~jxs/pub/models05.pdf | title = Modeling Turnpike Frontend System: a Model-Driven Development Framework Leveraging UML Metamodeling and Attribute-Oriented Programming | publisher = In Proc. of the 8th ACM/IEEE International Conference on Model Driven Engineering Languages and Systems (MoDELS/UML 2005) | access-date = 2006-03-21 | url-status = live | archive-url = https://web.archive.org/web/20160303170619/http://www.cs.umb.edu/~jxs/pub/models05.pdf | archive-date = 2016-03-03 }} * {{cite web |last=Rouvoy |first=Romain |author2=Merle, Philippe |year=2006 |url=http://research.microsoft.com/~cszypers/events/WCOP2006/rouvoy-wcop-06.pdf |title=Leveraging Component-Oriented Programming with Attribute-Oriented Programming |publisher=In Proc. of the 11th ECOOP International Workshop on Component-Oriented Programming (WCOP 2006) |url-status=dead |archiveurl=https://web.archive.org/web/20061223004531/http://research.microsoft.com/~cszypers/events/WCOP2006/rouvoy-wcop-06.pdf |archivedate=2006-12-23 }} {{Refend}}

==External links== * 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] {{Webarchive|url=https://web.archive.org/web/20080920003854/http://fractal.objectweb.org/fraclet |date=2008-09-20 }}: 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

{{Programming paradigms navbox}}

Category:Programming paradigms