# Attribute-oriented programming

> Mediated Wiki article. Canonical URL: https://mediated.wiki/source/Attribute-oriented_programming
> Markdown URL: https://mediated.wiki/source/Attribute-oriented_programming.md
> Source: https://en.wikipedia.org/wiki/Attribute-oriented_programming
> Source revision: 1304710319
> License: Creative Commons Attribution-ShareAlike 4.0 International (https://creativecommons.org/licenses/by-sa/4.0/)

{{More footnotes|date=August 2009}}

'''Attribute-oriented programming''' ('''@OP''') is a technique for embedding metadata, namely [attributes](/source/attribute_(computing)), within program code.

== Attribute-oriented programming in various languages ==
=== C++ ===
[C++](/source/C%2B%2B) has support for attributes. [C++11](/source/C%2B%2B11) added attributes, which can indicate extra information to the compiler. [C++26](/source/C%2B%2B26) added annotations for [reflection](/source/reflective_programming).

=== C# ===
The [C# language](/source/C_Sharp_(programming_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](/source/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](/source/Java_(programming_language)) has support for annotations. With the inclusion of [Metadata Facility for Java](/source/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](/source/Java_Platform%2C_Standard_Edition) 5.0 release it is possible to utilize attribute-oriented programming right out of the box.
[XDoclet](/source/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](/source/Unified_Modeling_Language) (UML) supports a kind of attribute called [stereotypes](/source/stereotype_(UML)).

== 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

---
Adapted from the Wikipedia article [Attribute-oriented programming](https://en.wikipedia.org/wiki/Attribute-oriented_programming) by Wikipedia contributors ([contributor history](https://en.wikipedia.org/wiki/Attribute-oriented_programming?action=history)). Available under [Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/). Changes may have been made.
